我如何在Python中写入CSV文件?
我基本上有2列。第一列是事务名称列表,第二列是时间。
我需要创建一段代码,当用户填写输入框时,可以更新时间列。
我在tkinter中设置了输入框,并准备好了文本变量。获取变量我很好,但我遇到的问题是使用text变量并在csv文件中找到正确的单元格并覆盖它。
基本上我想找到正确的单元格并将值粘贴到csv文件中的什么位置。
任何想法?
感谢
答案 0 :(得分:2)
您可以创建临时文件,将行复制到tmp文件,然后仅替换以事务名称开头的行。假设每行有一个元组[name,value]的CSV,你可以使用这样的东西:
from tempfile import mkstemp
from os import close
from shutil import move
def update(filename, name, value):
fd, path = mkstemp()
with open(path,'w') as tmpfile:
with open(filename) as csv:
for line in cvs:
if line.startswith(name):
tmpfile.write(",".join([name,value]))
else:
tmpfile.write(line)
close(fd)
move(path, filename)
答案 1 :(得分:1)
假设您有一个名为file.csv
的文件,如下所示:
Col1,Col2
entry1,timestamp1
entry2,timestamp2
您可以像这样使用csv库来修改任何条目并将其粘贴到新的.csv.new文件中(您可以选择删除' .new'扩展名,但它会覆盖您的旧文件):
import csv
csv_file = "file.csv"
file_dict = {}
with open(csv_file, mode='rb') as f:
reader = csv.reader(f)
top_row = next(reader)
for row in reader:
file_dict[row[0]] = row[1]
# get transaction name and timing
transaction_name = "entry1"
timing = "timestamp3"
# do the update
file_dict[transaction_name] = timing
# create updated version of file
with open(csv_file+".new", mode='wb') as out_f:
writer = csv.writer(out_f)
writer.writerow(top_row)
writer.writerows(file_dict.items())
请注意,这可能会重新排列您的csv文件。你没有说明这是否是一个问题。如果是,您可以对字典进行排序或使用OrderedDict。有关详情,请参阅此处: https://docs.python.org/2/library/collections.html#collections.OrderedDict