我有制表符分隔的数据,我将选择的几列导出到另一个文件中。我有:
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)
我做错了什么???为什么要重复?
提供帮助
谢谢!
答案 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