0

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

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

4

5 回答 5

1

对于list(调用它seq)和目标行长度(调用它rowsize),你会做这样的事情:

split_into_rows = [seq[i: i + rowsize] for i in range(0, len(seq), rowsize)]

然后,您可以使用 writer 的writerows方法将元素写入文件:

writer.writerows(split_into_rows)

对于惰性求值,请改用生成器表达式:

split_into_rows = (seq[i: i + rowsize] for i in range(0, len(seq), rowsize))
于 2013-04-25T04:16:24.677 回答
0

我建议使用临时数组 B。

  1. 获取原始数组A的长度
  2. 将第一个 A.length/2 复制到数组 B
  3. 将换行符添加到数组 B。
  4. 将数组 A 的其余部分附加到 B。
于 2013-04-25T04:17:26.167 回答
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 提供了许多操作列表的方法。在这里查看一些文档

是的,有很多方法可以做你想做的事,但是你必须处理的列表不仅仅是简单地等同于range(1,9)numpy,你不仅可以简洁地做你想做的事,你可以在很多地方操作你的列表将其转换为 numpy 数组后的不同方式

于 2013-04-25T04:18:24.407 回答
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))
于 2013-04-25T05:51:48.757 回答
-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 表达式计算密钥,在这种情况下,它是数字之前的代数字母。

于 2013-04-25T04:24:38.510 回答