用python向csv文件中添加行

tuwxkamq  于 2022-12-06  发布在  Python
关注(0)|答案(2)|浏览(228)

我有两个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文件。
我在哪里犯了错误,或者有没有更好的方法来完成这项工作?

y1aodyip

y1aodyip1#

res是一个文件句柄,因此append方法不适用于它。因此,在打开输出文件时出现了一个属性错误,导致输出文件为空(或者,是的,其中一个输入文件为空,立即结束zip,但此答案解释了如何修复 next 问题)
一个快速解决办法是:

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

rjee0c15

rjee0c152#

最简单的方法就是使用一个像panda这样的库,使用panda,向一个已有的文件中添加一个列就像把文件加载到一个 Dataframe 中一样简单,只需要在一行中添加所需的列。
添加可以仅通过赋值或通过join/merge方法来完成。

相关问题