我有两个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文件。
我在哪里犯了错误,或者有没有更好的方法来完成这项工作?
2条答案
按热度按时间y1aodyip1#
res
是一个文件句柄,因此append
方法不适用于它。因此,在打开输出文件时出现了一个属性错误,导致输出文件为空(或者,是的,其中一个输入文件为空,立即结束zip
,但此答案解释了如何修复 next 问题)一个快速解决办法是:
但最好的方法是将
zip
的结果扁平化,并将其提供给csv.writer
对象(使用解析,通过将两个输入csv行相加来生成每行)请注意,在编写文件(Python 3)时需要使用
newline=""
,以避免在运行Windows时出现臭名昭著的空行“bug”我已经在
with
语句中添加了输入文件,以确保在退出时输入是关闭的。并且还删除了分隔符参数,因为逗号是默认值。rjee0c152#
最简单的方法就是使用一个像panda这样的库,使用panda,向一个已有的文件中添加一个列就像把文件加载到一个 Dataframe 中一样简单,只需要在一行中添加所需的列。
添加可以仅通过赋值或通过join/merge方法来完成。