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

时间:2018-07-29 20:14:57

标签: python file csv

我必须使用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文件,该文件完全为空。

我在哪里犯错,还是有更好的方法来完成这项工作?

1 个答案:

答案 0 :(得分:1)

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语句中添加了输入文件,以确保退出时关闭输入。并且还删除了delimiter参数,因为默认值是逗号。