2015-03-18 4 views
-1

У меня есть проект, который включает в себя запись программы, которая извлекает определенные данные (числовые) из текстового файла, который должен быть обобщен для работы с разными текстовыми файлами в том же формате.Извлечение информации из текстового файла с помощью python

Файл представляет собой анализ молекулы, данные для извлечения - это координаты каждого атома внутри молекулы, поэтому его необходимо обобщить так, чтобы он извлекал столько данных, сколько там атомов в разных файлах.

Вот что я придумал до сих пор:

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

это предназначенные для извлечения точных данных в этих строках и помещать их в свои соответствующие списки. (Есть пробелы между данными и данными для извлечения чисел с несколькими символами. Но я получаю сообщение об ошибке «Stopiteration» на M = next (данные). Что такое ошибка? или как я могу изменить его на работу?

Спасибо заранее :)

+0

'StopIteration' происходит потому, что данных больше нет – acushner

ответ

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). Это вернет файл в начало файла и позволит вам прочитать его снова.

+0

, который решает, спасибо! :) –

Смежные вопросы