Estoy minando un documento grande. Quiero extraer una línea específica.

CONTINUED ON NEXT PAGE   CONTINUATION SHEET REFERENCE NO. OF DOCUMENT BEING CONTINUED: PAGE 4 OF 16 PAGES  

SPE2DH-20-T-0133   SECTION B  

PR: 0081939954   NSN/MATERIAL: 6530015627381

ITEM DESCRIPTION

BOTTLE, SAFETY CAP

BOTTLE, SAFETY CAP   RPOO1: DLA PACKAGING REQUIREMENTS FOR PROCUREMENT

RAQO1: THIS DOCUMENT INCORPORATES TECHNICAL AND/OR QUALITY REQUIREMENTS (IDENTIFIED BY AN 'R' OR AN 'I' NUMBER) SET FORTH IN FULL TEXT IN THE DLA MASTER LIST OF TECHNICAL AND QUALITY REQUIREMENTS FOUND ON THE WEB AT:

Quiero extraer la descripción inmediatamente debajo de ITEM DESCRIPTION.

He intentado muchos intentos fallidos.

Mi último intento fue:

for line in text:
    if 'ITEM' and 'DESCRIPTION'in line:
        print ('Possibe Descript:\n', line)

Pero no encontró el texto.

¿Hay alguna forma de encontrar ITEM DESCRIPTION y obtener la línea después o algo similar?

0
e.iluf 11 oct. 2019 a las 16:09

5 respuestas

La mejor respuesta

La siguiente función encuentra la descripción en la línea debajo de algunos pattern dados, p. "DESCRIPCIÓN DEL ARTÍCULO", y también ignora cualquier línea en blanco que pueda estar presente en el medio. Sin embargo, tenga en cuenta que la función no maneja el caso especial cuando existe el patrón, pero la descripción no.

txt = '''
CONTINUED ON NEXT PAGE CONTINUATION SHEET REFERENCE NO. OF DOCUMENT BEING CONTINUED:    PAGE 4 OF 16 PAGES

SPE2DH-20-T-0133 SECTION B

PR: 0081939954 NSN/MATERIAL: 6530015627381

ITEM DESCRIPTION

BOTTLE, SAFETY CAP

BOTTLE, SAFETY CAP RPOO1: DLA PACKAGING REQUIREMENTS FOR PROCUREMENT

RAQO1: THIS DOCUMENT INCORPORATES TECHNICAL AND/OR QUALITY REQUIREMENTS (IDENTIFIED BY AN 'R' OR AN 'I' NUMBER) SET FORTH IN FULL TEXT IN THE DLA MASTER LIST OF TECHNICAL AND QUALITY REQUIREMENTS FOUND ON THE WEB AT:
'''

Supuse que obtuviste tu texto como una cadena de texto, y por lo tanto la función a continuación lo dividirá en una lista de líneas.

pattern = "ITEM DESCRIPTION" # to search for

def find_pattern_in_txt(txt, pattern):
    lines = [line for line in txt.split("\n") if line] # remove empty lines
    if pattern in lines: return lines[lines.index(pattern)+1]
    return None

print(find_pattern_in_txt(txt, pattern)) # prints: "BOTTLE, SAFETY CAP"
0
magnus 18 oct. 2019 a las 08:34

Use la función de cadena 'find' como se muestra a continuación, 'find' devolverá el índice de la cadena que está buscando, por lo que un número positivo muestra que la ha encontrado.

Código:


txt = "Hello, welcome to my world."
x = txt.find("welcome")
if x > 0:  
    print(x)

***
output:
***
7
0
Joe McKenna 11 oct. 2019 a las 13:35

Usar expresiones regulares

import re
pattern = re.compile("(ITEM DESCRIPTION)\n.*") #if the information is directly 
below without white space
pattern = re.compile("(ITEM DESCRIPTION)\n\n.*") #if there is a white space 
before the information


for i, line in enumerate(open('file.txt')):
    for match in re.finditer(pattern, line):
        print 'Found on line %s: %s' % (i+1, match.group())
0
Bram 11 oct. 2019 a las 14:00
f=open("aa.txt","r")

a=[]

for i in f:

  a.append(i.split())

t1=0

for j in range(len(a)):

   for i in range(len(a[j])):

       if(a[j][i]=="ITEM" and a[j][i+1]=="DESCRIPTION"):

           t1=j

for i in range(t1+1,len(a)):

    for j in range(len(a[i])):

        print(a[i][j]),
0
Georgy 11 oct. 2019 a las 13:50

Prueba así:

description = False
for line in text:
    if 'ITEM DESCRIPTION' in line:
        description = True
    if description:
        print(line)

Sabe que esto funcionará, pero necesita algo para dejar de leer la descripción, tal vez otro título como este

description = False
for line in text:
    if 'ITEM DESCRIPTION' in line:
        description = True
    if description:
        print(line)
    if "END OF SOMETHING":
        description = False
0
Florian Bernard 11 oct. 2019 a las 13:30
58341981