【问题标题】:Print elements of a list to a .csv file将列表元素打印到 .csv 文件
【发布时间】:2011-03-14 19:29:42
【问题描述】:

我正在读取一个 csv 文件并将每一行作为一个列表处理。最后,我想重新打印到 .csv 文件,但这些行不一定是均匀的。我显然不能只去"print row",因为这会将其打印为列表。如何以 .csv 格式打印?

【问题讨论】:

  • 包含您要打印的数据的数据结构是什么样的?
  • 它看起来像一堆字符串放在一起作为一堆列表..例如,[3123,SomeString, etc] [14, morestuff, etc, AB12DE] etc..

标签: python string csv


【解决方案1】:

阅读手册,有一个 CSV 写入器方法(也有示例)。不要打印数据,存储它们,然后将它们写入 CSV 文件

http://docs.python.org/library/csv.html#csv.writer

【讨论】:

  • CSV 模块绝对是您的朋友。正是这个模块让我理解了 Python 哲学中“包含电池”的含义。
【解决方案2】:

假设“行”包含字符串列表,您可以尝试使用

print ",".join(row)

【讨论】:

    【解决方案3】:

    虽然您的问题看起来更像是写入到 csv 文件而不是将其打印到标准输出,但这里有一个使用 StringIO 执行后者的示例:

    import StringIO
    import csv
    
    a_list_from_csv_file = [['for', 'bar'], [1, 2]]
    out_fd = StringIO.StringIO()
    writer = csv.writer(out_fd, delimiter='|')
    for row in a_list_from_csv_file:
        writer.writerow(row)
    print out_fd.getvalue()
    

    像这样,您可以使用您正在阅读的 csv 使用的不同分隔符或转义字符。

    【讨论】:

      【解决方案4】:

      “线条不一定是均匀的”是什么意思?您使用的是自制 CSV 解析器还是使用 csv module

      如果前者并且你没有什么特别需要逃避的,你可以尝试类似的东西

      print ",".join([ '"' + x.replace('"', '""') + '"' for x in row])
      

      如果您不想在每个字段周围使用 "",则可以创建一个类似 escape_field() 的函数来检查它是否需要用双引号括起来和/或转义。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-06
        • 1970-01-01
        • 2018-04-10
        • 2016-03-27
        相关资源
        最近更新 更多