首页 > 解决方案 > 导出为 CSV,它会覆盖或附加每个新行的标题和行

问题描述

这是一个包含多个值的大数据库,我有一个脚本,它逐行读取并创建一个新行,其中包含用于导出到 CSV 文件的数据。新行被传递给内部创建 CSV 文件的函数,然后尝试编写新行,结果并不完全符合我的需要。

我尝试了几种方法并检查了论坛上的其他问题,仍然发现不同的输出但不是预期的。我试过这些:

1- with open(csv_file, 'wb') as csvfile:with open(csv_file, 'ab') as csvfile: 结果:TypeError: a bytes-like object is required, not 'str'

2- with open(csv_file, 'a') as csvfile:结果

IMSI,MSISDN,

VAL01,VAL02

IMSI,MSISDN,

VAL03,VAL04

IMSI,MSISDN,

VAL05,VAL06

IMSI,MSISDN,

VAL07,VAL08

3- with open(csv_file, 'w') as csvfile:

IMSI,MSISDN,

VAL07,VAL08

结果 3 是合乎逻辑的,文件正在覆盖,并且它不会在下一行附加后续值,将行保持在新行之前

ifwith语句分开writer.writerow(val)我打破它的感觉并返回ValueError: I/O operation on closed file.

新行传球的功能是

def escribir(val):
    print(type(val))
    with open(csv_file, 'w') as csvfile:
        writer = csv.DictWriter(csvfile, fieldnames=csv_columns)
        writer.writeheader()
        writer.writerow(val)

我检查了传递值的类型,在 CSV 上写入是正确的

我希望在 CSV 文件中写入传递给函数的每个不同的新行,不重复标题,不换行。

标签: python-3.xexport-to-csvwith-statement

解决方案


您是否def escribir(val)为同一个输出 csv 文件多次调用?如果是这种情况,则writer.writeheader()从此功能中删除。编写一个单独的函数/代码片段,仅写入一次标题信息。


推荐阅读