Python:简单的文件格式化问题

时间:2010-08-10 18:48:23

标签: 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”看起来像

[ '苹果', '汽车', '红', '桔子', '船', '黑']

2 个答案:

答案 0 :(得分:1)

如果lista[['apple','car','red'],['orange','boat','black']],则循环中的每个k都将成为其中一个子列表,因此您需要做的就是加入该子元素的元素-list ,并将其作为一行输出:

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

答案 1 :(得分: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