2015-06-08 88 views
0

我想从输入文件中读取所有列,并只将选定的列打印到输出文件(第0,第3和第2列),并保留标题(4Temperature = 298 K)。使用Python将所选列从一个文件复制到另一个文件

我的当前代码写入“[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 
+0

你需要数字是一个float/int吗?为什么不把它作为一个字符串 –

+0

这没关系。我可以把它们保存为一个字符串。 – erhan

+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]))) 

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

+0

它的工作原理,但我应该保持列之间的空间。我怎样才能做到这一点? – erhan

+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() 
+0

它给这个错误:文件“text.py”,第10行,在 newlines.append(''.join ([row [0],row [3],row [2]]))IndexError:列表索引超出范围。 – erhan

+0

因为您使用的是与您在问题中发布的文件不同的文件。 –

相关问题