Extrair registros de um arquivo de texto, se um conjunto de strings puder ser encontrado no registro
O script abaixo extrairá registros do seu arquivo, se eles atenderem às condições que você descreveu na sua pergunta. Se a ordem for importante, consulte minhas anotações em Se o pedido for importante .
Como o script lê o arquivo por linha e subsequentemente processa as linhas por registro , ele deve ser bem rápido em arquivos grandes.
O script
#!/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
O que o script faz exatamente
- O script lê um registro (carregamento por linha), mantém ao mesmo tempo registro se alguma das strings
["FADED: 100", "AM:FF", "GG"]
ocorrer na linha. - Se nem todas as três cadeias ocorrerem no registro, o registro será excluído de "cache", o próximo registro será carregado e assim por diante
Se o pedido for importante
Se for importante em que ordem (linhas contendo-) as strings aparecem dentro do seu registro, você pode substituir a linha:
if len(test) == 3:
por:
if test == [0, 2, 1]
onde os números se referem aos índices das strings na lista checks = ["FADED: 100", "AM:FF", "GG"]
(onde 0 é a primeira string)
Como usar
- Copie o script em um arquivo vazio, salve-o como
filter_records.py
-
Execute o script com a origem (arquivo com seus registros atuais) e o arquivo de saída como argumentos, por exemplo:
python3 /path/to/filter_records.py /path/to/inputfile.txt /path/to/outputfile.txt
O resultado (no seu pequeno exemplo)
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
--- -------- --- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --- --- -- --