导出为CSV文件,它覆盖或附加标题,并为每行添加一行

时间:2019-07-01 17:43:26

标签: python-3.x export-to-csv with-statement

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

如果with语句与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文件中,而无需重复标题,也不会在行之间打断行。

1 个答案:

答案 0 :(得分:0)

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