【问题标题】:Python, transposing a list and writing to a CSV filePython,转置列表并写入 CSV 文件
【发布时间】:2012-05-21 09:09:34
【问题描述】:

我需要使用 python 写入一个 csv 文件,并且每个迭代器项都应该从一个新行开始。 所以我使用的分隔符是“\n”。 写入每个列表后,下一个列表应从下一个单元格开始写入。 如下:

 lol = [[1,2,3],[4,5,6]]

csv 会是这样的:

1 4
2 5
3 6

我尝试过的:

file = open("test.csv", "wb")
fileWriter = csv.writer(file , delimiter='\n',quotechar='|', quoting=csv.QUOTE_MINIMAL)
spamWriter.writerow([1,2,3])
spamWriter = csv.writer(file , delimiter=',',quotechar='|', quoting=csv.QUOTE_MINIMAL)
spamWriter.writerow([4,5,6])
file.close()

如下结果:

 1
 2
 3
 4 5 6

使用 csv 模块如何获得如下输出:

 1 4 
 2 5
 3 6

这里的空格表示 csv 文件中的逗号。

谢谢。

【问题讨论】:

    标签: python list csv


    【解决方案1】:

    首先使用zip()转置您的输入

    >>> zip(*lol)
    [(1, 4), (2, 5), (3, 6)]
    

    然后将其传递给csw.writer,例如

    with open("test.csv", "wb") as f:
        fileWriter = csv.writer(f, delimiter=',',quotechar='|', quoting=csv.QUOTE_MINIMAL)
        for row in zip(*lol):
            fileWriter.writerow(row)
    

    ... 结果是:

    $ cat test.csv 
    1,4
    2,5
    3,6
    

    【讨论】:

    • 它用 [ 和 ] 字符写
    • 我认为你应该把写属性改为w而不是wb,然后这个答案就可以完美地工作了..
    【解决方案2】:

    不使用 zip,您可以这样做:

    import csv
    
    lol = [[1,2,3],[4,5,6],[7,8,9]]
    item_length = len(lol[0])
    
    with open('test.csv', 'wb') as test_file:
      file_writer = csv.writer(test_file)
      for i in range(item_length):
        file_writer.writerow([x[i] for x in lol])
    

    这将输出到 test.csv:

    1,4,7
    2,5,8
    3,6,9
    

    【讨论】:

      【解决方案3】:

      如果您使用 Python3,您需要以文本格式“wt”打开文件,更多的是 csvwriterows 可用于一次编写所有内容。这是一个例子:

      data=[("test", "value1", "value2"), ("test2", "value3", "value4")]
      with open('my.csv','wt') as out:
         csv_out=csv.writer(out)
         csv_out.writerows(data)
      

      我刚刚注意到问题询问如何转换列表,这是一个单独的步骤,我将这样做:

      lol = [[1,2,3],[4,5,6]]
      data = zip(lol[0],lol[1])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-11
        • 1970-01-01
        • 2014-06-27
        • 2017-08-18
        • 2017-05-17
        • 2016-09-02
        相关资源
        最近更新 更多