2017-04-25 93 views
0

我将如何去写入Python中的CSV文件?在csv文件中查找单元格?

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

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

我已经在tkinter中设置了输入框并设置了文本变量。我可以得到变量,但我遇到的问题是采取文本变量并在csv文件中找到正确的单元格并覆盖它。

本质上我想找到正确的单元格并粘贴csv文件中的值。

有什么想法?

感谢

+0

也许检查模块'pandas'和函数'read_csv'和'write_csv'? –

回答

2

您可以创建中的临时文件,该行复制到tmp文件,然后只替换与交易名称开头的行。假设一个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) 
+0

不错的迭代解决方案,尽管OP可能希望使用'csv'模块来读取和写入文件,因为它可以轻松处理现实世界中存在的许多CSV文件格式的方言。 – martineau

1

假设你有一个名为file.csv文件看起来像这样:

Col1,Col2 
entry1,timestamp1 
entry2,timestamp2 

您可以使用像这样的csv库来修改任何条目,并将其粘贴到一个新.csv.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()) 

注意这w ^可能会重新安排您的CSV文件。你没有具体说明这是否是一个问题。如果是可以排序字典或使用OrderedDict。在这里看到更多的信息: https://docs.python.org/2/library/collections.html#collections.OrderedDict

+0

这需要将整个文件读入内存,这可能是一个问题(在任何情况下都是不必要的)。 – martineau

+0

我在第一个file_dict = {}上得到上述解决方案的语法错误。这是因为它是函数的第三部分吗?它开始作为高清updatetimings(): 问= messagebox.askquestion( '验证', '你确定要更新定时?') 如果问== '是': 尝试: \t newv5ctiming =浮动(newv5c获得()) \t newv62timing =浮子(newv62.get()) \t newdisptiming =浮子(newdisp.get()) \t csv_file = “Timings.csv” timings_list = []中的前几个步骤的工作很好,但是当它命中时会出现语法file_dict = {} –

+0

你得到的错误是什么?您可能需要查看它或发布另一个溢出问题,如果它尚未在此处。 – supernun

相关问题