目前尚不清楚你的問題是什麼,所以我將不得不猜測。如果你想要一個更具體的答案,而不是模糊的概括,你需要寫一個更具體的問題。
我懷疑你有一些像這樣的代碼:
with open('output.csv', 'w') as f:
dw = csv.DictWriter(f, ('name', 'age', 'tel'))
dw.writeheader()
dw.writerow(dict1)
with open('output.csv', 'a') as f:
dw = csv.DictWriter(f, ('name', 'age', 'tel'))
dw.writeheader()
dw.writerow(dict2)
而問題是,你的輸出是這樣的:
name,age,tel
Leo,15,123456789
name,age,tel
Zac,20,987654321
當你想這樣的:
name,age,tel
Leo,15,123456789
Zac,20,987654321
如果是這樣,解決這個問題的正確方法是第二次不要撥打writeheader
。根據您的代碼的結構,這可能非常簡單,只需在某處調用它即可。
但是,假設你有一些包裝函數,就像這樣:
def add_to_csv(row):
with open('output.csv', 'a') as f:
dw = csv.DictWriter(f, ('name', 'age', 'tel'))
dw.writeheader()
dw.writerow(row)
而且你不能改變它,你想讓它只寫如果該文件是空的頭。
有幾種不同的方式來判斷文件是否爲空。考慮到你已經在'a'
模式下打開文件,一個簡單的方法就是檢查f.tell()
是否爲非零。或者你可以檢查os.fstat(f.fileno()).st_size
是否爲非零。
但是,如果您在程序的一次運行中完成所有寫入操作,那麼在腳本中保持跟蹤可能更爲清晰。再次,您可以將open
和DictWriter
代碼移出到實例/全局級別,而不是本地函數/方法。或者您可以添加一個實例/全局標誌,用於跟蹤您是否調用了writeheader
。
我不確切知道OP要求什麼,但它不可能是這樣。他的兩個詞有完全相同的鍵,所以這總是一個空集。另外,他正在嘗試將'dict2'寫入CSV文件,因此只需編寫新的頭文件(如果有的話)就不會起任何作用。 – abarnert
是啊我假設你更接近OP想要的東西......我沒有很好地理解這個問題,我認爲... –
我不確定那裏有足夠的理解這個問題......我假設他很多人會問 - 與CSV文件有關的東西,可能與'DictWriter'有關......但很難做到這一點。 – abarnert