Как прочитать определенные наборы строк из большого файла данных в python? - PullRequest
0 голосов
/ 29 февраля 2020

Допустим, у меня есть файл данных, который включает повторные заголовки. Строки, которые мне нужно прочитать, включены между # и _ следующим образом:

Header :Hellow World  
Header :Hellow World
#
0.326681 11.7083 0 
4.34818 12.222 0 
7.56993 12.5076 0 
5.55984 11.798 0 
6.77682 11.7432 0 
4.44614 11.0851 0 
6.77111 10.4761 0 
_
Header :Hellow World  
Header :Hellow World
#
0.126018 2.98437 0 
0.855801 3.76535 0 
0.216594 0.154549 0 
4.38824 1.92399 0 
5.67207 1.28992 0 
5.28882 0.231295 0 
_
etc....

Я написал код, чтобы просто извлечь строки между # и _ и записать #i'th_list перед каждым списком. Дело в том, что мой код всегда работает в терминале без остановки. Может ли кто-нибудь помочь мне понять мою проблему?

f=open("f1.txt","w")
ff=open("f2.txt","r")

parsing=False
i=0
for line in ff:
    if line.startswith("#"):
        parsing=True
        f.write("#"+str(i)+"\n")
        i=i+1
    while parsing==True:
        f.write(ff.readline())
        if line.startswith("_"):
            break
    parsing=False 

ff.close()
f.close

Ответы [ 2 ]

1 голос
/ 29 февраля 2020

Проблема заключалась в том, что ваш код никогда не оставлял "while parsing == True" l oop. Я также не знаю, что делает метод readline (), но кажется, что он не вписывается в ваш код. Рабочий код:

f=open("f1.txt","w")
ff=open("f2.txt","r")

parsing=False
i=0
for line in ff:
    if line.startswith("#"):
        parsing=True
        f.write("#"+str(i)+"\n")
        i=i+1
        continue
    if parsing:
        if line.startswith("_"):
            parsing=False
            continue
        f.write(line) 

ff.close()
f.close()

PS: не забывайте скобки в ff.close (); -)

0 голосов
/ 29 февраля 2020

В вашем while l oop вы читаете строку, используя функцию ff.readline(), но в следующей строке кода вы используете другую 'строку', чтобы проверить, начинается ли она с '_' или нет.

f=open("f1.txt","w")
ff=open("no_header.txt","r")

parsing=False
i=0
for line in ff:
    if line.startswith("#"):
        parsing=True
        f.write("#"+str(i)+"\n")
        i=i+1
    while parsing==True:
        # Your code was not correct from this point
        current_line = ff.readline()
        if current_line.startswith("_"):
            break
        f.write(current_line)
    parsing=False 

ff.close()
f.close
...