使用Python将选定列从一个文件复制到另一个文件

时间:2015-06-08 18:49:46

标签: python

我想从输入文件中读取所有列,并仅将选定的列打印到输出文件(第0,第3和第2列),同时保留标题(4Temperature = 298 K)。

我当前的代码将“[1.0,1.0]”写入输出文件。我该如何解决?

#!/usr/bin/python

with open("test.txt", "r") as f:
    a1=[]
    a2=[]
    a3=[]
    a4=[]
    for line in f:
        if not line.strip() or line.startswith('Temperature') or line.startswith('4'): continue
        row = line.split()
        a1.append(str(row[0]))
        a2.append(float(row[1]))
        a3.append(float(row[2]))
        a4.append(float(row[3]))
f = open('output.txt','a')
f.write(str(a1)+str(a3)+str(a2)) 
f.close()

输入文件:

4
Temperature = 298 K
C   -5.27210   0.23153   0.13488 
H   -1.99335  -2.87058   3.25594 
H   -1.33502  -3.88407   1.93295 
H   -3.06617  -3.39783   1.91314 

请求的输出:

4
Temperature = 298 K
C   0.13488   0.23153    
H   3.25594  -2.87058    
H   1.93295  -3.88407   
H   1.91314  -3.39783   

2 个答案:

答案 0 :(得分:2)

我不明白为什么你在那里使用了四个不同的列表...你可以只使用一个容器,就像这样(未经测试):

#!/usr/bin/python

newlines = []
with open("test.txt", "r") as f:
    for line in f:
        if not line.strip() or line.startswith('Temperature') or line.startswith('4'): continue
        row = line.split()
        newlines.append('   '.join([row[0], row[3], row[2]]))

f = open('output.txt','a')
f.write('\n'.join(newlines))
f.close()

答案 1 :(得分:1)

那怎么样?

with open('data.txt', 'r') as fin:
    with open('data2.txt', 'w') as fout:
        # Header
        fout.write(fin.readline())
        fout.write(fin.readline())
        # Columns
        for l in fin:
            cols = l.split()
            fout.write("%s  % f  % f\n" % (cols[0], float(cols[3]), float(cols[2])))

代码一次只存储文件的一行,并立即写入输出文件。此外,间距保留在原始文件中。