使用python从文本文件中提取信息

时间:2015-03-18 14:37:14

标签: python python-3.4

我的项目包括编写一个从文本文件中提取某些数据(数字)的程序,该程序必须通用化,以使用相同格式的不同文本文件。

该文件是对分子的分析,要提取的数据是分子内每个原子的坐标,因此必须以一种方式推广,即提取与不同文件中的原子一样多的数据。 / p>

这是我到目前为止所提出的:

def Prog1():
f=open( "C:/dimer.out","r" )
m=open("C:/dimer1.out","w")
g=f.readlines()
for k in range(len(g)):
    if "Standard" in g[k]:
        c=k
for n in range(c+5, len(g)):
    m.write(g[n])
    if "------------" in g[n+1]:
        break

这基本上用信息提取行,并根据文件格式以通用方式将它们写入新的文本文件中。 (带有信息的行总是在包含'标准'的行之后的5行开始,并且后面跟着一行有很多'-----'的行。 然后;

def Prog2():
X=[]
Y=[]
Z=[]
m=open('C:/dimer1.out','r')
n=0
for line in m:
    n+=1
k=n
data = csv.reader(m, delimiter=" ")
for i in range(k):
    M=next(data)
    while '' in M:
        M.remove('')
    X.append(M[3])
    Y.append(M[4])
    Z.append(M[5])

这是为了提取这些行中的确切数据并将它们放在各自的列表中。 (数据和数据之间有空格可以接受多个字符的数字。但我在M = next(数据)上收到错误'Stopiteration'。错误是什么?或者我如何修改它以便工作?

提前致谢:)

1 个答案:

答案 0 :(得分:0)

问题在于这两条线:

m = open('C:/dimer1.out', 'r')

for line in m:
    n += 1

...

data = csv.reader(m, delimiter=' ')
for i in range(k):
    M = next(data)

完成for line in m后,您已经耗尽了文件对象。文件头现在位于文件的末尾,所以当你再次以csv.reader的形式阅读它时,你没有想出任何东西。

for line in m循环和for i in range(k)循环之间的任何点,都执行m.seek(0)。这会将文件头放回文件的开头,并允许您再次阅读它。