附加数据列

时间:2010-08-13 10:57:45

标签: python

我有制表符分隔的数据,我将选择的几列导出到另一个文件中。我有:

a b c d
1 2 3 4
5 6 7 8 
9 10 11 12

我得到了:

b, d
b, d
2, 4
b, d
2, 4
6, 8
b, d
2, 4
6, 8
10, 12
......

我想:

b, d
2, 4
6, 8 
10, 12

我的代码是

f=open('data.txt', 'r')
f1=open('newdata.txt','w')
t=[]
for line in f.readlines():
    line =line.split('\t')
    t.append('%s,%s\n' %(line[0], line[3]))
    f1.writelines(t)

我做错了什么???为什么要重复?

提供帮助

谢谢!

2 个答案:

答案 0 :(得分:4)

缩进是错误的,因此您在每次迭代时都会编写整个数组,而不是仅在最后。将其更改为:

t=[]
for line in f.readlines():
    line = line.split('\t')
    t.append('%s,%s\n' % (line[0], line[3]))
f1.writelines(t)

或者你可以一次编写一行而不是等到结束,然后根本不需要数组t

for line in f.readlines():
    line = line.split('\t')
    s = '%s,%s\n' % (line[0], line[3])
    f1.write(s)

答案 1 :(得分:1)

如前所述,最后一行输入错误。最重要的是,你正在努力工作并且容易出错。您不需要t列表,也不需要使用f.readlines()

您的代码的另一个问题是,您的line[3]将以换行符结束(因为readlines()和朋友将换行符保留在行的末尾),并且您要添加另一个换行格式{{ 1}} ...这会在输出文件上产生双倍间距,但你没有提到过。

另外,您说第一个输出行中需要'%s,%s\n',并且说您得到b, d - 但是您的代码显示b, d会生成'%s,%s\n' %(line[0], line[3]) 。注意两个不同之处:(1)空格缺失(2)a,d而不是a

总体而言:您说您获得了b,但您展示的代码会产生b, d\n。将来,请显示相互对应的代码和输出。使用复制/粘贴;不要从记忆中打字。

试试这个:

a,d\n\n