gpt4 book ai didi

python - 将行添加到 csv 文件而不创建中间副本

转载 作者:太空宇宙 更新时间:2023-11-04 10:32:09 26 4
gpt4 key购买 nike

如何通过就地编辑将行添加到 csv 文件?我想避免写入临时文件然后替换原始文件的模式(伪代码):

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

最佳答案

这在一般情况下是不可能的。这是原因,来自您的代码:

fieldnames = sorted(set(dic.keys() + csv_old.fieldnames))

对我来说,这表示至少在某些情况下您的新行包含不在前几行中的列。当您像这样添加一行时,除了在末尾追加新行之外,您还必须更新文件的标题(第一行)。如果您需要按字母顺序排列列名,那么您可能必须重新排列所有其他行中的字段以保留列的顺序。

因为您可能需要编辑文件的第一行,除了在末尾附加新行并可能编辑中间的所有行之外,没有合理的方法可以就地完成这项工作。

我的建议是尝试提前弄清楚您可能需要包含的所有字段/列,这样您就可以保证您的程序永远不必编辑标题并且可以简单地添加新行。

关于python - 将行添加到 csv 文件而不创建中间副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25792747/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com