每隔python列表的第二个元素插入新行

每隔python列表的第二个元素插入新行,python,csv,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) 如何确保在每个第二个元素后插入新行?默认情况下,'\r\n'用作行终止符

我有以下清单

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)
如何确保在每个第二个元素后插入新行?默认情况下,
'\r\n'
用作行终止符,因此我尝试添加
'\r\n'
在构建列表时添加每第二个字符串的结尾,但没有这样的运气,csv总是在一行上生成。

如果要使用分隔符连接字符串,请使用
str.join()

但您确实希望使用来编写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'], ...]
或者在生成行时写入行。

您可以执行以下操作:

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

显然,您试图生成一个包含两列的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将用'\r\n'替换'\r\n',如果它是平台默认值(即在Windows上)

个人,而不是
csv
模块的粉丝。对我来说,自己做要比记住
方言
语法容易得多。@selllikesybok:那么你从来没有用嵌入的换行符或引号处理过CSV。@user3014073:CSV模块为你添加换行符。CSV模块默认使用
\r\n
作为行分隔符。我正在使用CSV模块。我在我的原始版本中添加了更多的代码示例post@MartijnPieters我有。我更喜欢自己做。您是如何打开CSV的?为什么要使用
\r\n
作为分隔符?此处的预期输出是什么?注意:不能使用两个字符分隔符;您的代码现在甚至无法运行。谢谢,我相信这是正确的方法。我将把每一列都组织成一个单独的列表。
''.join( ','.join(row) + '\n' for row in mylist)
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