【问题标题】:write a Python 3 list to .csv将 Python 3 列表写入 .csv
【发布时间】:2016-06-30 10:35:21
【问题描述】:

我有一个需要写入 .csv 的列表@ 在 .csv 中的分隔符/格式存在各种问题(a17 等分开)

我的列表如下所示:

buffer = [['a17', 'b17', 'c17', '8', 'e17', 'f17\n'], ['a24', 'b24', 'c24', '6', 'e24', 'f24\n'], ['a27', 'b27', 'c27', '9', 'e27', 'f27\n'], ['a18', 'b18', 'c18', '9', 'e18', 'f18\n'], ['a5', 'b5', 'c5', '5', 'e5', 'f5\n'], ['a20', 'b20', 'c20', '2', 'e20', 'f20\n'], ['a10', 'b10', 'c10', '1', 'e10', 'f10\n'], ['a3', 'b3', 'c3', '3', 'e3', 'f3\n'], ['a11', 'b11', 'c11', '2', 'e11', 'f11\n']]

我可以看到它就像一个列表列表,所以我尝试了for eachRow in buffer:,然后继续使用eachRow.split(','),但那里也没有好处。 我只需要写一个 .csv 它应该很容易吧......我错过了什么?

【问题讨论】:

    标签: list csv python-3.x


    【解决方案1】:

    您可以像这样从缓冲区中删除 \n 字符串。您还必须在 Python 3 中的 with 语句中添加 newline=''。有关更多详细信息,请参阅 this answer

    import csv
    
    
    buffer = [['a17', 'b17', 'c17', '8', 'e17', 'f17\n'],
              ['a24', 'b24', 'c24', '6', 'e24', 'f24\n'],
              ['a27', 'b27', 'c27', '9', 'e27', 'f27\n'],
              ['a18', 'b18', 'c18', '9', 'e18', 'f18\n'],
              ['a5', 'b5', 'c5', '5', 'e5', 'f5\n'],
              ['a20', 'b20', 'c20', '2', 'e20', 'f20\n'],
              ['a10', 'b10', 'c10', '1', 'e10', 'f10\n'],
              ['a3', 'b3', 'c3', '3', 'e3', 'f3\n'],
              ['a11', 'b11', 'c11', '2', 'e11', 'f11\n']]
    
    for row_index, list in enumerate(buffer):
        for column_index, string in enumerate(list):
            buffer[row_index][column_index] = buffer[row_index][column_index].replace('\n', '')
    
    with open('output.csv', 'w', newline='') as f:
        writer = csv.writer(f)
        writer.writerows(buffer)
    

    【讨论】:

      【解决方案2】:
      import csv
      with open('output.csv','w') as f:
          writer = csv.writer(f)
          writer.writerows(buffer)
      

      请注意,每个列表中的最后一个条目都有一个换行符,因此 csvwriter 正确引用了字符串,因此您最终会得到 "f17\n"(以第一个列表为例),如果您是不期待换行。

      【讨论】:

      • 我不敢相信我是如此接近。你很棒!这是一个很酷的开始,正如您所建议的那样,换行符正在添加空白行。那么你建议什么是摆脱\n 换行符的最干净的方法? (当我阅读源 .csv 文件时,它们似乎就在那里)
      • 我尝试了lineAsList = [i.strip() for i in a],它从buffer 中删除了\ns,但.csv 仍然每隔一行空白......有什么想法吗?
      • 我在回答中解决了您的问题。
      猜你喜欢
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      • 2014-09-21
      • 1970-01-01
      • 2013-07-16
      • 2012-01-02
      • 1970-01-01
      相关资源
      最近更新 更多