如何将python列表导出到csv并添加换行符

时间:2013-04-25 04:10:41

标签: python excel csv

我有一个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 

有什么建议吗?任何帮助表示赞赏。

5 个答案:

答案 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.

  1. 获取原始阵列A的长度
  2. 将第一个A.length / 2复制到阵列B
  3. 将新行字符添加到数组B。
  4. 将数组A的其余部分附加到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表达式计算,在这种情况下,它将是数字前面的代数字母。