在python列表的每个第2个元素插入新行

时间:2013-11-20 16:42:32

标签: python csv

我有以下列表

mylist = ['a','b','c' ....]

list.append('a')
list.append('b'+'\r\n')
list.append('c')

CSV生成

with open(csvFile, "w",) as output:
    writer = csv.writer(output, delimiter='\r\n')
    writer.writerow(list)

如何确保在每个第2个元素后插入新行?默认情况下,'\r\n'用作行终止符,所以我尝试在构建列表时添加'\r\n'添加每个第二个字符串的结尾但没有运气,csv总是在一行中生成

4 个答案:

答案 0 :(得分:1)

如果您想使用分隔符加入字符串,请使用str.join()

'\r\n'.join(mylist) + '\r\n'

但您确实想使用csv module来编写CSV文件:

import csv

with open(outputfilename, 'wb') as ofh:
    writer = csv.writer(ofh)
    for value in mylist:
        writer.writerow([value])

请注意writerow()需要列的列表,因此如果输入列表中的每个字符串都是一行,请将其包装在列表中。

默认情况下,CSV模块使用\r\n作为行分隔符:

>>> import csv
>>> from StringIO import StringIO
>>> ofh = StringIO()
>>> writer = csv.writer(ofh)
>>> writer.writerow(['a', 'b', 'c'])
>>> ofh.getvalue()
'a,b,c\r\n'

如果您尝试将列表中的每两个值写为一行,请执行以下操作:

with open(outputfilename, 'wb') as ofh:
    writer = csv.writer(ofh)
    for i in range(0, len(mylist), 2):
        writer.writerow(mylist[i:i+2])

用于简单方法,或生成列表以具有嵌套结构:

[['a', 'b'], ['c', 'd'], ...]

或在生成时编写行

答案 1 :(得分:0)

你可以这样做:

import csv

mylist=[chr(i) for i in range(65,86)]  #['A', 'B', ... 'T', 'U']

with open(ur_file,'w') as fout:
    writer=csv.writer(fout)
    for line in (mylist[i:i+2] for i in range(0,len(mylist),2)):
        writer.writerow(line)

制作如下文件:

A,B
C,D
E,F
G,H
I,J
K,L
M,N
O,P
Q,R
S,T
U

答案 2 :(得分:0)

显然,您尝试生成一个包含两列的csv文件。

首先构建数据以匹配文件的结构。 e.g。

mylist = [('a', 'b'), 
          ('c', 'd'),
           ... 
         ]

然后您可以添加列和行分隔符。

'\n'.join( ','.join(row) for row in mylist )

如果您还希望文件的最后一行以'\ n'结尾,请使用

''.join( ','.join(row) + '\n' for row in mylist)

然而,正如其他人所说,使用csv模块可能更好 负责引用列分隔符等。 此外,当您使用csv模块时,我认为如果您的数据是结构化的,则更加清晰 适当地,即作为行列表。

顺便说一句,我使用'\ n'而不是'\ r \ n',因为如果你在文本模式下写入文件opend,python会将'\ n'替换为'\ r \ n',如果它是平台默认(即在Windows上)

答案 3 :(得分:0)

list = [a,b,c,d,e,f,g,h]

for x in list:
with open(csvFile, "w",) as output:
    index = 0
    writer = csv.writer(output)
    writer.writerow(list[index:index + 2)
    # however many values you want to write as one line
    index += 2