【问题标题】:How do you write a quoted, comma separated list of items to CSV file without the last comma in quoted list?如何在没有引号列表中的最后一个逗号的情况下将带引号的逗号分隔项目列表写入 CSV 文件?
【发布时间】:2018-12-06 00:46:00
【问题描述】:

将包含逗号分隔值的嵌入式(引用)列表的数据行写入 CSV 文件的优雅、Pythonic 方式是什么?

我需要在逗号分隔的列表周围加上引号,以便 Excel 在使用 Excel 查看列表时不会将列表分成单独的列。

我的函数如下所示:

def write_customer_list(self):
    with open('reports/systems.csv', 'w') as f:
        f.write('Systems Report for week {}\n'.format(self.week))
        f.write('CustId,IP_AddrList,ModelNum\n')   # Header for csv file
        for cust_id, system in self.systems.items():
            f.write('{}'.format(cust_id))
            f.write(',\"')  # open double quote string for list
            for value in system['ip_addr_list']:
                f.write('{},'.format(value))
            f.write('\"')  # close the quote
            f.write(',{}\n'.format(system['model_num']))

输出如下所示:

123,"10.1.1.6,10.1.2.12,10.1.3.15,",NEX3601
124,"10.2.5.6,10.2.1.12,",NEX3604

如何去掉 ip 列表中的尾随 ','?

【问题讨论】:

  • f.write('{}'.format(cust_id)) 为什么不只是f.write(cust_id)
  • CSV 编写器需要一个表示单行的列表(或某种可迭代的)。 不要使用format(),只需将列表传递给作者即可。您应该使用 CSV 模块。

标签: python


【解决方案1】:

代替

for value in system['ip_addr_list']:
    f.write('{},'.format(value))

f.write( ','.join(system['ip_addr_list']) )

这将为您提供一个逗号分隔的列表,该列表末尾没有逗号。有关详细信息,请参阅 join 函数的文档。

您可能还想看看CSV 模块。使用此模块时,您只需提供数据列表,它会为您处理所有内容的格式化。

【讨论】:

  • 这根本不是 CSV 的写法
  • 哦,伙计。我误读并认为他们从一开始就使用 CSV 模块,抱歉。就我个人而言,我会翻转你的答案并从推荐开始。
  • 不用担心。我有点假设你看错了。是的,如果他已经在使用 CSV 模块,那么这将是一个糟糕的答案。我将在最后留下建议,因为当他已经工作的代码时,他重写所有内容以使用 CSV 模块,这并没有多大意义。实际上,即使我知道 CSV 模块存在,我实际上也不会经常使用它,因为当我只是编写一个快速的一次性脚本时,不必查找 CSV 模块的工作方式会更快。
  • 对不起,我这么晚了,但@Mr.Me,这就像一个魅力!这么简单——呃——我怎么没想到呢!这就是 Stack Overflow 的优点!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-16
  • 2021-10-31
  • 1970-01-01
  • 1970-01-01
  • 2015-06-10
  • 2019-12-25
  • 1970-01-01
相关资源
最近更新 更多