簡體   English   中英

使用python將行添加到csv文件中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM