我有一个python列表,我想将它导出到csv文件,但我不想将所有列表存储在同一行。我想在给定点切片列表并开始一个新行。像这样:
list = [x1,x2,x3,x4,y1,y2,y3,y4]
我希望以这种格式导出它
x1 x2 x3 x4
y1 y2 y3 y4
到目前为止,我有这个:
import csv
A = ["1", "2", "3", "4", "5", "6", "7", "8"]
result = open("newfile.csv",'wb')
writer = csv.writer(result, dialect = 'excel')
writer.writerow(A)
result.close
输出看起来像这样:
1 2 3 4 5 6 7 8
我希望输出为
1 2 3 4
5 6 7 8
有什么建议吗?任何帮助表示赞赏。
答案 0 :(得分:1)
对于list
(称之为seq
)和目标行长度(称之为rowsize
),您可以执行以下操作:
split_into_rows = [seq[i: i + rowsize] for i in range(0, len(seq), rowsize)]
然后,您可以使用编写器的writerows
方法将元素写入文件:
writer.writerows(split_into_rows)
对于延迟评估,请改为使用生成器表达式:
split_into_rows = (seq[i: i + rowsize] for i in range(0, len(seq), rowsize))
答案 1 :(得分:0)
我建议使用临时数组B.
答案 2 :(得分:0)
以这种方式处理列表时,最好使用numpy模块:
import numpy as np
A = ["1", "2", "3", "4", "5", "6", "7", "8"]
#now to convert your list into a 2-Dimensional numpy array
A = np.array((A)).reshape((2,4))
result = open("newfile.csv",'wb')
writer = csv.writer(result, dialect = 'excel')
#you use writer.writerows() instead of .writerow because you have multiple rows rather than one
writer.writerows(row)
result.close
numpy提供了许多操作列表的方法。查看一些文档here
是的,有很多方法可以做你想要的,但你必须处理不仅仅等同于range(1,9)
的列表,而且你不仅可以简洁地做你想做的事情,一旦将其转换为numpy数组,就可以用许多不同的方式操作列表
答案 3 :(得分:0)
>>> import csv
>>> A = ["1", "2", "3", "4", "5", "6", "7", "8"]
>>> with open("newfile.csv",'wb') as f:
w = csv.writer(f)
w.writerows(zip(*[iter(A)]*4))
答案 4 :(得分:-1)
这个
import itertools
l = ['a1','a2','b1','b2']
def toCSV(fname,l):
with open(fname+'.csv','w') as f:
f.write('\n'.join([','.join(list(g)) for k,g in itertools.groupby(l,key=lambda k: k[0])]))
toCSV('mycsv',l)
会产生
a1,a2
b1,b2
它在很大程度上依赖于itertool的groupby函数。 Python Doc。基本上它会根据键对元素进行分组。密钥可以使用lambda表达式计算,在这种情况下,它将是数字前面的代数字母。