How to update rows in a CSV file

前端 未结 2 1482
心在旅途
心在旅途 2020-12-09 04:53

Hello I\'m trying to make a program that updates the values in a csv. The user searches for the ID, and if the ID exists, it gets the new values you want to replace on the r

2条回答
  •  半阙折子戏
    2020-12-09 05:00

    With the csv module you can iterate over the rows and access each one as a dict. As also noted here, the preferred way to update a file is by using temporary file.

    from tempfile import NamedTemporaryFile
    import shutil
    import csv
    
    filename = 'my.csv'
    tempfile = NamedTemporaryFile(mode='w', delete=False)
    
    fields = ['ID', 'Name', 'Course', 'Year']
    
    with open(filename, 'r') as csvfile, tempfile:
        reader = csv.DictReader(csvfile, fieldnames=fields)
        writer = csv.DictWriter(tempfile, fieldnames=fields)
        for row in reader:
            if row['ID'] == str(stud_ID):
                print('updating row', row['ID'])
                row['Name'], row['Course'], row['Year'] = stud_name, stud_course, stud_year
            row = {'ID': row['ID'], 'Name': row['Name'], 'Course': row['Course'], 'Year': row['Year']}
            writer.writerow(row)
    
    shutil.move(tempfile.name, filename)
    

    If that's still not working you might try one of these encodings:

    with open(filename, 'r', encoding='utf8') as csvfile, tempfile:
    with open(filename, 'r', encoding='ascii') as csvfile, tempfile:
    

    Edit: added str, print and encodings

提交回复
热议问题