Python: извлечь 3 строки из файла после соответствующей строки - PullRequest
1 голос
/ 20 июня 2019

У меня есть текстовый файл, который содержит данные.Он содержит больше информации, чем мне нужно, поэтому я пытаюсь извлечь только раздел о температуре, который имеет заголовок «ТЕМПЕРАТУРА».Есть три строки данных, которые мне нужно извлечь, а затем создать новый текстовый файл, содержащий только соответствующие данные.

Вот пример того, как выглядит текстовый файл 'Test_File.txt':

NOT IMPORTANT
234123 1523 1234 613 1234 146134 51234 123231 123 1235123512 
5467 3 564 245 26 234 5 62 435 234 534 62 345 2346 234 52 345 2345 2
456 2345 2362 3452 346 2345 236 254 24 523 45 23462 345 234 54326 23
TEMPERATURE
11223 112312 4123123 6423 123124 563456 123123 35734562 34526 3452 346
123412 51341 12341 473567 11234 45746 578957 23523 3452 32435 3 32452346 
23453 23462 234532 54245 345 4563 6573456 23452345 367 4523 45 2345234
NOT NEEDED
324123 6462 345 3563 67 566 123 412343 4645 76568 5623 5341 23413 65
573568767 345 2354 324623 452 346 2345 234 526 23 4523 452 345 3254 345 
WAVELENGTH
123 234 5134 234 6246 1234 5623 3 568 3245 8 2455 345 47 2345 2
2354 46 5657 24455 1345 4566 3 2345 456 6 345 25 34 2354236 2345

Вот мой код:

with open("Test_File.txt") as data:
    data = infile.readlines()

data = [x.strip() for x in data]    

n = 1000000

list = []

for item in data:
    if item == "TEMPERATURE":
        list.append(item)
        n = 0
        continue
    elif n < 4:   
        list.append(item)
        n += 1
        continue
    elif n >= 4:
        break


print(list)        

Я сохраняюкогда я пытаюсь его запустить, появляется ошибка, поэтому любая помощь будет принята с благодарностью!Спасибо!

Ответы [ 2 ]

2 голосов
/ 20 июня 2019

Вы можете использовать f.next() или f.__next__(), чтобы отсканировать и найти строку «ТЕМПЕРАТУРА», а затем добавить следующие 3 строки данных:

Python3:

l = []

with open("Test_File.txt", "r+") as f:
    while f.__next__().strip() != 'TEMPERATURE':
        continue

    for _ in range(3):
        l.append(f.__next__().strip())

print(l)

>> ['11223 112312 4123123 6423 123124 563456 123123 35734562 34526 3452 346', 
    '123412 51341 12341 473567 11234 45746 578957 23523 3452 32435 3 32452346', 
    '23453 23462 234532 54245 345 4563 6573456 23452345 367 4523 45 2345234']

Python2:

l = []

with open("Test_File.txt", "r") as f:
    while f.next().strip() != 'TEMPERATURE':
        continue

    for _ in range(3):
        l.append(f.next().strip())

print(l)

>> ['11223 112312 4123123 6423 123124 563456 123123 35734562 34526 3452 346', 
    '123412 51341 12341 473567 11234 45746 578957 23523 3452 32435 3 32452346', 
    '23453 23462 234532 54245 345 4563 6573456 23452345 367 4523 45 2345234']
0 голосов
/ 21 июня 2019
import os

a = """
NOT IMPORTANT
234123 1523 1234 613 1234 146134 51234 123231 123 1235123512 
5467 3 564 245 26 234 5 62 435 234 534 62 345 2346 234 52 345 2345 2
456 2345 2362 3452 346 2345 236 254 24 523 45 23462 345 234 54326 23
TEMPERATURE
11223 112312 4123123 6423 123124 563456 123123 35734562 34526 3452 346
123412 51341 12341 473567 11234 45746 578957 23523 3452 32435 3 32452346 
23453 23462 234532 54245 345 4563 6573456 23452345 367 4523 45 2345234
NOT NEEDED
324123 6462 345 3563 67 566 123 412343 4645 76568 5623 5341 23413 65
573568767 345 2354 324623 452 346 2345 234 526 23 4523 452 345 3254 345 
WAVELENGTH
123 234 5134 234 6246 1234 5623 3 568 3245 8 2455 345 47 2345 2
2354 46 5657 24455 1345 4566 3 2345 456 6 345 25 34 2354236 2345"""


def givedata(dataset, word, lines):
    b = ""
    x = dataset.splitlines()
    for line in x: 
        if word in line:
            for y in range(1, lines+1):
                b += x[x.index(line)+y]+ "\n"
    return b
b = givedata(a, "TEMPERATURE", 3)

with open("newfile.txt", "w") as file:
    file.write(b)

os.startfile("newfile.txt")

Выход:

11223 112312 4123123 6423 123124 563456 123123 35734562 34526 3452 346
123412 51341 12341 473567 11234 45746 578957 23523 3452 32435 3 32452346 
23453 23462 234532 54245 345 4563 6573456 23452345 367 4523 45 2345234
...