2010-08-10 64 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