您好,我正在尝试制作一个更新csv中值的程序。用户搜索ID,如果ID存在,它将在该ID号所在的行上获取要替换的新值。这row[0:9]是我的身份证的长度。
我的想法是从0-9扫描每行或我的ID编号在哪里,当找到它时,我将使用.replace()方法替换除它以外的值。这是我的方法:
def update_thing():
replace = stud_ID +','+ stud_name +','+ stud_course +','+ stud_year
empty = []
with open(fileName, 'r+') as upFile:
for row in f:
if row[0:9] == stud_ID:
row=row.replace(row,replace)
msg = Label(upd_win, text="Updated Successful", font="fixedsys 12 bold").place(x=3,y=120)
if not row[0:9] == getID:
empty.append(row)
upFile.close()
upFile = open(fileName, 'w')
upFile.writelines(empty)
upFile.close()
Run Code Online (Sandbox Code Playgroud)
但这不起作用,我需要有关如何解决此问题的想法。
使用该csv模块,您可以遍历行并作为字典访问每个行。还要在此指出,更新文件的首选方法是使用临时文件。
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)
Run Code Online (Sandbox Code Playgroud)
如果仍然无法使用,您可以尝试以下编码之一:
with open(filename, 'r', encoding='utf8') as csvfile, tempfile:
with open(filename, 'r', encoding='ascii') as csvfile, tempfile:
Run Code Online (Sandbox Code Playgroud)
编辑:添加了str,打印和编码
| 归档时间: |
|
| 查看次数: |
20146 次 |
| 最近记录: |