导出为 CSV,它会覆盖或附加 header 并为每个新行逐行

Export to CSV, it overwrite or append header and line each for every new row

这是一个包含多个值的大数据库,我有一个脚本,它逐行读取并创建一个包含数据的新行以导出到 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 是合乎逻辑的,文件正在被覆盖,它不会附加下一行,后续值保持新行之前的行

if with statement separate writer.writerow(val) 我打破了它的意义 return 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 文件中写入传递给函数的每个不同的新行,不重复 header,不在行之间换行。

您是否为同一个输出 csv 文件多次调用 def escribir(val)? 如果是这种情况,请从此函数中删除 writer.writeheader()。 写一个单独的 function/code 代码片段,只写一次 header 信息。