Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python将行添加到csv文件_Python_File_Csv - Fatal编程技术网

使用python将行添加到csv文件

使用python将行添加到csv文件,python,file,csv,Python,File,Csv,我需要一个csv文件,每个文件有两列,其中一列是日期。我想将第二个文件的第二列添加到第一个文件中,得到一个包含3列的文件 我创建了一个新文件,并通过以下方式将数据附加到其中: import csv coinsfile = open('total-bitcoins.csv', newline='') pricesfile = open('market-price.csv', newline='') coins = csv.reader(coinsfile, delimiter=',') pri

我需要一个csv文件,每个文件有两列,其中一列是日期。我想将第二个文件的第二列添加到第一个文件中,得到一个包含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行来生成每一行)

请注意,编写文件(Python 3)时需要
newline=”“
,以避免运行windows时出现臭名昭著的空行“bug”


我在
with
语句中添加了输入文件,以确保退出时输入关闭。并且还删除了分隔符参数,因为逗号是默认值。

res.append(line)
res是一个文件句柄,您忘记了csv部分。您犯了一个错误,因为您只使用了
csv.reader()
。如果你想写入文件,你需要
writer()
对象。你能解释一下吗@Jean-Françoisfare
res.write(line+“\n”)
应该修复它,但它是脏的。如果您的输入文件之一为空,则
zip
为空,因此
for
循环从不循环,因此您得到一个空文件。所以,这就是你需要解决的问题。一旦解决了这个问题,您将遇到第二个问题:
res.append
将引发
AttributeError:“\u io.TextIOWrapper”对象没有属性“append”
。你可以按照Jean-François Fabre的建议来解决这个问题,或者更好的方法是,按照roganjosh的建议,使用
csv.writer
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))