如何通过在位编辑向csvfile添加行?我希望避免写入临时文件然后替换原始文件的模式(伪代码):
add_records_to_csv(newdata, infile, tmpfile)
delete(infile)
rename(tmpfile, infile)
这是实际的函数。“#<;--”这几行是我想要摆脱的,和/或浓缩成更直接的内容:
def add_records_to_csv(dic, csvfile):
""" Append a dictionary to a CSV file.
Adapted from http://pymotw.com/2/csv/
"""
f_old = open(csvfile, 'rb') # <--
csv_old = csv.DictReader(f_old) # <--
fpath, fname = os.path.split(csvfile) # <--
csvfile_new = os.path.join(fpath, 'new_' + fname ) # <--
print(csvfile_new) # <--
f = open(csvfile_new, 'wb') # <--
try:
fieldnames = sorted(set(dic.keys() + csv_old.fieldnames))
writer = csv.DictWriter(f, fieldnames=fieldnames)
headers = dict( (n,n) for n in fieldnames )
writer.writerow(headers)
for row in csv_old:
writer.writerow(row)
writer.writerow(dic)
finally:
f_old.close()
f.close()
return csvfile_new
一般来说这是不可能的。以下是原因,来自您的代码:
对我来说,这意味着至少在某些情况下您的新行包含不在前几行中的列。添加这样的行时,除了在末尾追加新行之外,还必须更新文件头(第一行)。如果需要按字母顺序排列列名,则可能需要重新排列所有其他行中的字段,以保持列的顺序。你知道吗
因为您可能需要编辑文件的第一行,除了在末尾附加新行,还可能需要编辑文件中间的所有行,所以没有一种合理的方法来实现这一点。你知道吗
我的建议是,尝试提前找出可能需要包含的所有字段/列,这样您就可以保证您的程序永远不必编辑标题,只需添加新行。你知道吗
如果新行的结构与现有记录相同,则以下操作将起作用:
另一方面,如果新行的结构与现有行不同,则csv文件可能是错误的文件格式。为了给csv文件添加一个新的列,每一行都需要编辑。这种方法的性能非常差,对于一个大的csv文件来说会非常明显。你知道吗
相关问题 更多 >
编程相关推荐