【问题标题】:How can I write each row to a csv file?如何将每一行写入 csv 文件?
【发布时间】:2022-01-29 04:50:09
【问题描述】:

我目前有正在写入 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

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

有什么建议或解决方案可以让我添加多个条目吗?我查看了其他圣人问题并在 Google 上进行了搜索,但看起来我已经完成了实现此结果所需的必要更改,但不确定我缺少什么。

【问题讨论】:

  • 是什么让您认为数据正在被覆盖?您以附加模式打开文件。问题似乎是您的 if 条件-在创建文件一次后它永远不会进入(只有 1 行,因为您的代码一次插入一个)。您可以通过在 try 块内放置打印语句来检查
  • 你的代码结构不好。您不应该每次调用都打开/写入标题/写入一行/关闭。你最终会得到多个标题,这将是非常低效的

标签: python python-3.x dataframe csv read.csv


【解决方案1】:

对于csv.writer(和csv.reader),you need to open the file with newline=''

你也每次都写header,有点奇怪。

这是一个或多或少可以满足您需求的最小示例:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多