Я анализирую файл xyz.txt
то, которое содержит hifen, разделило записи. Я хочу извлечь записи на основе присутствия строк FADED:100
, AM:FF
и GG
. Впоследствии, я должен записать им в новый файл, faded100.txt
. Исходный файл включает более затем 40 тысяч записей, бывших похожих ниже.
--- -------- --- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --- --- -- -- rtuyss A/A go go go go go go go go go go go go go go IRE AP QQ Z ORDER xxxxxxx1 country: 201 NVDS TEMPROR EXTREME BUS TIME: TRASS: 12 AIDED: 12 FADED: 100 U U U u U A U O O O O O O O GG Y Y Y Y Y O Y O O O O O O O POU ATM UNITED # AM:FF Y Y Y Y Y O Y O O O O O O O POU POU POU POU --- -------- --- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --- --- -- -- rtuyss A/A go go go go go go go go go go go go go go IRE AP QQ Z ORDER xxxxxxx1 country: 201 NVDS TEMPROR EXTREME BUS TIME: TRASS: 12 AIDED: 12 FADED: 200 U U U u U A U O O O O O O O ZZ Y Y Y Y Y O Y O O O O O O O POU ATM UNITED # AM:FF Y Y Y Y Y O Y O O O O O O O POU POU POU POU --- -------- --- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --- --- -- -- rtuyss A/A go go go go go go go go go go go go go go IRE AP QQ Z ORDER xxxxxxx1 country: 201 NVDS TEMPROR EXTREME BUS TIME: TRASS: 12 AIDED: 12 FADED: 100 U U U u U A U O O O O O O O IP Y Y Y Y Y O Y O O O O O O O POU ATM UNITED # AM:FF Y Y Y Y Y O Y O O O O O O O POU POU POU POU --- -------- --- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --- --- -- --
Сценарий ниже извлечет записи из Вашего файла, если они удовлетворят условиям, Вы описали в своем вопросе. Если порядок важен, см. мои примечания в том, Если порядок важен.
Так как сценарий читает файл на строку и впоследствии обрабатывает строки на запись, это должно быть довольно быстро на больших файлах.
#!/usr/bin/env python3
import sys
#--- set the strings to be (needed to be) found below
checks = ["FADED: 100", "AM:FF", "GG"]
#---
f = sys.argv[1]; out = sys.argv[2]; rec = []; test = []
with open(f) as src, open(out, "a+") as targ:
for l in src:
rec.append(l)
if l.startswith("---"):
if len(test) == 3:
for l in rec:
targ.write(l)
rec = []; test = []
else:
for s in checks:
if s in l:
test.append(checks.index(s))
break
["FADED: 100", "AM:FF", "GG"]
происходит в строке.Если это важно, в котором порядке (строки, содержащие-), строки появляются в Вашей записи, можно заменить строку:
if len(test) == 3:
:
if test == [0, 2, 1]
где числа относятся к индексам строк в списке checks = ["FADED: 100", "AM:FF", "GG"]
(где 0 первая строка),
filter_records.py
Запустите скрипт с источником (файл с Вашими текущими записями) и выходной файл как аргументы, например:
python3 /path/to/filter_records.py /path/to/inputfile.txt /path/to/outputfile.txt
rtuyss A/A go go go go go go go go go go go go go go IRE AP QQ Z
ORDER xxxxxxx1
country: 201 NVDS TEMPROR EXTREME
BUS TIME: TRASS: 12 AIDED: 12 FADED: 100
U U U u U A U O O O O O O O
GG Y Y Y Y Y O Y O O O O O O O POU
ATM UNITED # AM:FF Y Y Y Y Y O Y O O O O O O O POU POU POU POU
--- -------- --- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --- --- -- --