如何将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 到目前为止,

我有一个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
到目前为止,我有:

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))