我將如何去寫入Python中的CSV文件?在csv文件中查找單元格?
我基本上有2列。第一列是交易名稱列表,第二列是時間。
我需要創建一段代碼,可以在用戶填寫輸入框時更新計時列。
我已經在tkinter中設置了輸入框並設置了文本變量。我可以得到變量,但我遇到的問題是採取文本變量並在csv文件中找到正確的單元格並覆蓋它。
本質上我想找到正確的單元格並粘貼csv文件中的值。
有什麼想法?
感謝
我將如何去寫入Python中的CSV文件?在csv文件中查找單元格?
我基本上有2列。第一列是交易名稱列表,第二列是時間。
我需要創建一段代碼,可以在用戶填寫輸入框時更新計時列。
我已經在tkinter中設置了輸入框並設置了文本變量。我可以得到變量,但我遇到的問題是採取文本變量並在csv文件中找到正確的單元格並覆蓋它。
本質上我想找到正確的單元格並粘貼csv文件中的值。
有什麼想法?
感謝
您可以創建中的臨時文件,該行復制到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)
不錯的迭代解決方案,儘管OP可能希望使用'csv'模塊來讀取和寫入文件,因爲它可以輕鬆處理現實世界中存在的許多CSV文件格式的方言。 – martineau
假設你有一個名爲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
這需要將整個文件讀入內存,這可能是一個問題(在任何情況下都是不必要的)。 – martineau
我在第一個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 = {} –
你得到的錯誤是什麼?您可能需要查看它或發佈另一個溢出問題,如果它尚未在此處。 – supernun
也許檢查模塊'pandas'和函數'read_csv'和'write_csv'? –