2010-08-10 70 views
0

我正在使用下面的代码来写入文件,但此刻它将所有内容写入新行。Python:简单文件格式化问题

import csv 
antigens = csv.reader(open('PAD_n1372.csv'), delimiter=',') 

lista = [] 
pad_file = open('pad.txt','w') 

for i in antigens: 
    lista.append(i[16]) 
    lista.append(i[21]) 
    lista.append(i[0]) 

for k in lista: 
    pad_file.write(k+',') 
    pad_file.write('\n') 

如果说我的“LISTA”看起来像

[['apple','car','red'],['orange','boat','black']] 

我想在我的文本文件输出为:

apple,car,red 
orange,boat,black 

我知道我的新行字符是错误的地方,但我现在知道把它放在哪里,我怎样才能从每行结尾删除逗号?


编辑

对不起我的 “LISTA” 看起来像

[ '苹果', '汽车', '红', '橙', '船', '黑']

回答

1

如果lista[['apple','car','red'],['orange','boat','black']],则循环中的每个k将成为子列表之一,因此,您只需将该子列表的元素加入,并将其输出为单行:

for k in lista: 
    pad_file.write(','.join(k)) 
    pad_file.write('\n') 

编辑基于评论:如果lista['apple, 'car', 'red', 'orange', 'boat', 'black'],你想每行3个元素,你可以改变for目标列表理解返回相应的子列表:

for k in [lista[x:x+3] for x in xrange(0, len(lista), 3)]: 
    pad_file.write(','.join(k)) 
    pad_file.write('\n') 

还有其他方法可以将列表分成块;请参阅this SO question

+0

对不起,我改变了我的LISTA – Phil 2010-08-10 18:56:15

+0

@Phil的甲错误你是如何决定多少元素在每行上呢?它只是固定在3? – 2010-08-10 19:01:14

+0

是的,它被固定为3 – Phil 2010-08-10 19:03:46

0

看起来您正在处理包含22列以上的输入csv文件。为什么不使用csv.writer来重写每一行呢?

短,工作示例:

import csv 

# generate an input file 
f = open('in.csv','w') 
f.write('''\ 
Col1,Col2,Col3,Col4,Col5 
1,2,3,4,5 
6,7,8,9,10 
11,12,13,14,15 
''') 
f.close() 

# open the files (csv likes binary mode) 
input = open('in.csv','rb') 
output = open('out.csv','wb') 

antigens = csv.reader(input) 
pad_file = csv.writer(output) 

for i in antigens: 
    pad_file.writerow([i[4],i[2],i[0]]) 

input.close() 
output.close() 

“out.csv” 载:

Col5,Col3,Col1 
5,3,1 
10,8,6 
15,13,11