【问题标题】:Writing a csv file in Python 3在 Python 3 中编写 csv 文件
【发布时间】:2014-03-31 10:12:37
【问题描述】:

我有三个列表 abc,我想将它们作为列写入 csv 文件。我遇到了麻烦(因为data 将这些作为行)以及编写csv。这就是我所拥有的。

import csv

my_output=open('myfile.csv','wb')
mywriter=csv.writer(csv_out)

a=[1,3,5,7]
b=[2,4,6,8]
c=[0,0,0,0]
data=[a,b,c]

for item in data:
    mywriter.writerow(item)
my_output.close()

【问题讨论】:

  • csv_out 在哪里定义?你的意思是my_output
  • 是的,我已将其更改为 my_output。现在我收到一个错误:
  • TypeError: 'str' 不支持缓冲区接口

标签: python


【解决方案1】:

无需创建变量data。使用内置函数 zip。它创建了一个迭代器,用于聚合来自每个可迭代对象的元素。

for item in zip(a, b, c):
    mywriter.writerow(item)

参考文档https://docs.python.org/3/library/functions.html#zip

【讨论】:

    【解决方案2】:

    Excel 将数据存储在Row-major order

    你必须先把问题分解:

    a = [1,3,5,7]
    b = [2,4,6,8]
    c = [0,0,0,0]
    data = [a,b,c]
    
    for i in range(len(data[0])):
        for j in range(len(data)):
            print data[j][i],
        print ''
    

    输出:

    1 2 0 
    3 4 0 
    5 6 0 
    7 8 0 
    

    把它们放在一起:

    import csv
    
    my_output = open('myfile.csv', 'wb')
    mywriter = csv.writer(my_output)
    
    a = [1,3,5,7]
    b = [2,4,6,8]
    c = [0,0,0,0]
    data = [a,b,c]
    
    for i in range(len(data[0])):
        row = [data[j][i] for j in range(len(data))]
        mywriter.writerow(row)
    
    my_output.close()
    

    更短(更安全)的版本:

    import csv
    
    my_output = open('myfile.csv', 'wb')
    mywriter = csv.writer(my_output)
    
    a = [1,3,5,7]
    b = [2,4,6,8]
    c = [0,0,0,0]
    data = [a,b,c]
    
    for row in zip(*data):
        mywriter.writerow(row)
    
    my_output.close()
    

    有关此内置函数的信息,请参阅zip([iterable, ...])

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-27
      • 2016-12-12
      • 1970-01-01
      • 2015-07-29
      • 2019-02-23
      • 1970-01-01
      • 1970-01-01
      • 2015-01-28
      相关资源
      最近更新 更多