如何将python列表导出到csv并添加换行符
我有一个python列表,我想将其导出到csv文件,但我不想将所有列表存储在同一行中。我想在给定的点上对列表进行切片,然后开始新的一行。大概是这样的:如何将python列表导出到csv并添加换行符,python,excel,csv,Python,Excel,Csv,我有一个python列表,我想将其导出到csv文件,但我不想将所有列表存储在同一行中。我想在给定的点上对列表进行切片,然后开始新的一行。大概是这样的: list = [x1,x2,x3,x4,y1,y2,y3,y4] 1 2 3 4 5 6 7 8 split_into_rows = [seq[i: i + rowsize] for i in range(0, len(seq), rowsize)] 我希望它以这种格式导出 x1 x2 x3 x4 y1 y2 y3 y4 到目前为止,
list = [x1,x2,x3,x4,y1,y2,y3,y4]
1 2 3 4 5 6 7 8
split_into_rows = [seq[i: i + rowsize] for i in range(0, len(seq), rowsize)]
我希望它以这种格式导出
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
输出如下所示:
list = [x1,x2,x3,x4,y1,y2,y3,y4]
1 2 3 4 5 6 7 8
split_into_rows = [seq[i: i + rowsize] for i in range(0, len(seq), rowsize)]
我希望输出是
1 2 3 4
5 6 7 8
有什么建议吗?非常感谢您的帮助。对于列表(称之为seq
)和目标行长度(称之为rowsize
),您可以执行以下操作:
list = [x1,x2,x3,x4,y1,y2,y3,y4]
1 2 3 4 5 6 7 8
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))
我建议使用临时数组B
获取原始数组A的长度
将第一个A.length/2复制到数组B
向数组B添加新行字符
将数组A的其余部分追加到B
以这种方式处理列表时,最好使用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数组,你就可以用很多不同的方法来操作它
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功能。本质上,它将根据一个键对元素进行分组。可以使用lambda表达式计算密钥,在本例中,该表达式将是数字之前的代数字母。或夹住中间列表,并作为生成器表达式直接传递给writerows
@StevenRumbalski:Point take。我认为为了便于说明,最好将步骤分开。更正:您不能使用islice()
,因为csv.writer.writerows()
只能处理序列行。我认为在处理csv数据时没有特别好的理由不使用csv
模块。在这种情况下,也没有特别好的理由使用csv模块使用csv文件的csv
模块有效地传达程序员的意图,以及标准化csv格式。请注意,OP选择了方言=“excel”
,而不必担心是否使用\r\n
或\n
作为行终止符,这将quotechar
使用,等等。您可以使用writer.writerows()
来避免显式的for
循环,我得到以下错误:TypeError:“str”不支持缓冲区接口
>>> 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))