[英]add row to a csv file with python
我必須csv文件,每個文件有2列,其中之一是日期。 我想將第二個文件的第二列添加到第一個文件,從而得到一個具有3列的文件。
我是通過創建一個新文件並將數據附加到它的方式來做到這一點的:
import csv
coinsfile = open('total-bitcoins.csv', newline='')
pricesfile = open('market-price.csv', newline='')
coins = csv.reader(coinsfile, delimiter=',')
prices = csv.reader(pricesfile, delimiter=',')
with open('result.csv', 'w') as res:
for coin_row, price_row in zip(coins, prices):
line = str(coin_row[0]) + ',' + str(coin_row[1]) + ',' + str(price_row[1])
res.append(line)
該代碼運行無任何錯誤,但結果是一個csv文件,該文件完全為空。
我在哪里犯錯,或者有更好的方法來完成這項工作?
res
是文件句柄,因此append
方法不適用於它。 因此,在打開輸出文件時出現屬性錯誤,導致輸出文件為空(或者,是的,其中一個輸入文件為空,立即結束zip
,但是此答案說明了如何解決下一個問題)
一個快速修復是:
res.write(line+"\n")
但是最好的方法是將zip
的結果展平並將其提供給csv.writer
對象(使用一種理解方法,通過將兩個csv輸入行相加來生成每一行)
import csv
with open('result.csv', 'w', newline="") as res, open('total-bitcoins.csv', newline='') as coinsfile, open('market-price.csv', newline='') as pricesfile:
coins = csv.reader(coinsfile)
prices = csv.reader(pricesfile)
cw = csv.writer(res)
cw.writerows(coin_rows+price_row for coin_row, price_row in zip(coins, prices))
請注意,編寫文件(Python 3)時需要newline=""
以避免運行Windows時出現臭名昭著的空行“ bug”
我在with
語句中添加了輸入文件,以確保退出時關閉輸入。 並且也刪除了定界符參數,因為逗號是默認值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.