Python,转置列表并写入 CSV 文件
Posted
技术标签:
【中文标题】Python,转置列表并写入 CSV 文件【英文标题】:Python, transposing a list and writing to a CSV file 【发布时间】: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 文件中的逗号。
谢谢。
【问题讨论】:
【参考方案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”打开文件,更多的是 csv
有 writerows
可用于一次编写所有内容。这是一个例子:
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])
【讨论】:
以上是关于Python,转置列表并写入 CSV 文件的主要内容,如果未能解决你的问题,请参考以下文章