如何将每一行写入 csv 文件?

问题描述 投票:0回答:1

我目前有正在写入 csv 文件的代码,但是,它不断替换文件的第一行并覆盖它而不是写入它。

注意:我在 main() 内的 for 循环中有这个函数。

def write_csv_report(filename, region, data, current, server1, server2=False):
    if not os.path.exists(os.path.dirname(filename)):
        try:
            dir = os.makedirs(os.path.dirname(filename))
            
            header = ['region','old_dns_server', 'proposed_dns_server1', 'proposed_dns_server2']
            data = [region, current, server1, server2]

            with open(filename, 'a') as file:
                writer = csv.writer(file)
                writer.writerow(header)
                writer.writerow(data)

        except OSError as exc:
            if exc.errno != errno.EEXIST:
                raise

当我在脚本中运行此函数时,它会写入文件,但仅添加一个条目。

有什么建议或解决方案可以添加多个条目吗?我看过其他圣人的问题并用谷歌搜索,但看起来我已经有了实现这个结果所需的必要改变,不确定我错过了什么。

python python-3.x dataframe csv
1个回答
1
投票

对于

csv.writer
(和
csv.reader
),您需要使用
newline=''
打开文件。

你每次还写标题,这有点奇怪。

这是一个最小的示例,或多或少可以实现您想要的功能:

import csv

header = ['region','old_dns_server', 'proposed_dns_server1', 'proposed_dns_server2']

data1 = ['foo', 'bar', 'bar', 'quux']
data2 = ['foo1', 'bar1', 'bar1', 'quux2']

filename = 'test.csv'

with open(filename, 'w', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(header)
    writer.writerow(data1)

with open(filename, 'a', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(data2)

给予:

region,old_dns_server,proposed_dns_server1,proposed_dns_server2
foo,bar,bar,quux
foo1,bar1,bar1,quux2
© www.soinside.com 2019 - 2024. All rights reserved.