在csv文件中查找单元格?

时间:2017-04-25 21:51:42

标签: python csv

我如何在Python中写入CSV文件?

我基本上有2列。第一列是事务名称列表,第二列是时间。

我需要创建一段代码,当用户填写输入框时,可以更新时间列。

我在tkinter中设置了输入框,并准备好了文本变量。获取变量我很好,但我遇到的问题是使用text变量并在csv文件中找到正确的单元格并覆盖它。

基本上我想找到正确的单元格并将值粘贴到csv文件中的什么位置。

任何想法?

感谢

2 个答案:

答案 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