Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

457
Views
Extraiga la línea del archivo txt usando python

Soy nuevo aquí y actualmente estoy aprendiendo Python. Esta es mi primera publicación acá.

Estoy tratando de extraer un historial de chat enviado por un usuario en particular a través de un archivo .txt. por ejemplo, el número +99 9999 9999. Pero no puedo obtener el contenido intermedio.

 02/09/2020, 23:45 - +99 9999 9999: 02/09/2020 task A -Changes A task b Changes b 03/09/2020, 01:55 - +88 8888 8888: 2-SEP-2020 task c -Changes c task d Changes d 03/09/2020, 01:55 - +99 9999 9999: 2-SEP-2020 task e -Changes e task f Changes f

mi codigo actual es

 number = "+99 9999 9999" with open('text.txt') as input_data: for line in input_data: if number in line: print(line)

mi salida es el número con el contenido

 02/09/2020, 23:45 - +99 9999 9999: 02/09/2020 03/09/2020, 01:55 - +99 9999 9999: 2-SEP-2020

¿Cómo puedo editar mi código para mostrar las líneas posteriores si el número coincide con la fila? Cualquier orientación sería apreciada.

la salida que quiero

 02/09/2020, 23:45 - +99 9999 9999: 02/09/2020 task A -Changes A task b Changes b 03/09/2020, 01:55 - +99 9999 9999: 2-SEP-2020 task e -Changes e task f Changes f

Nuevos datos

 [23/9/20, 11:26:42 PM] John - Salesman: 23/09/2020 -task a -task b [23/9/20, 11:30:03 PM] Shawn - Support: 23/09/2020 -task c -task d [24/9/20, 9:54:44 PM]Shawn - Support: 24/09/2020 -task e -task f [24/9/20, 10:06:58 PM] Damien - Support: 24/09/2020 -task g -task h -task i -task j [24/9/20, 10:53:52 PM] John - Salesman: 24/09/2020 -task k -task l -task m -task n
over 4 years ago · Hanz Gallego
7 answers
Answer question

0

Tarea 1

Esta será otra solución mía si su archivo de historial tiene más de 2 tareas para un solo número de teléfono.

Sintaxis de código

 inp = input("please, Enter your input that you want to search for: ") def scanner (path, input): with open(path) as file: lines = file.readlines() for index, line in enumerate(lines): if line[0].isdigit() == True and line[20: -13] == input: print(line) lin = index+1 try: while lines[lin][0].isdigit() is False: print(lines[lin]) lin +=1 except IndexError: break print("="*40) print(f"*****History of {inp}*****") scanner(path, inp)

Producción

 please, Enter your input that you want to search for: +99 9999 9999 ======================================== *****History of +99 9999 9999***** 02/09/2020, 23:45 - +99 9999 9999: 02/09/2020 task A -Changes A task b Changes b 03/09/2020, 01:55 - +99 9999 9999: 2-SEP-2020 task e -Changes e task f Changes f [Program finished]

Tarea 2

Este está tan relacionado con el mismo lugar, la diferencia aquí estará en la operación de búsqueda extraída.

Sintaxis de código

 def scanner2(path, input): with open(path) as file: lines = file.readlines() for index, line in enumerate(lines): if line[1].isdigit() == True and line[22: -13].strip(" ") == input: print(line) lin = index+1 try: while lines[lin][1].isdigit() is False: print(lines[lin]) lin +=1 except IndexError: break print("="*40) print(f"*****History of {inp}*****") scanner2(path2, inp)

Salida ( la entrada distingue entre mayúsculas y minúsculas )

 please, Enter your input that you want to search for: John - Salesman ======================================== *****History of John - Salesman***** [23/9/20, 11:26:42 PM] John - Salesman: 23/09/2020 -task a -task b [24/9/20, 10:53:52 PM] John - Salesman: 24/09/2020 -task k -task l -task m -task n [Program finished]
over 4 years ago · Hanz Gallego Report

0

import re with open('text.txt') as input_data: lines = input_data.readlines() re_number = re.compile("\+\d\d \d\d\d\d \d\d\d\d") number = "+99 9999 9999" blocks = [] tmp_block = [] for index, line in enumerate(lines): if (re_number.search(line)): if (tmp_block): blocks.append(tmp_block.copy()) tmp_block.clear() flag = 0 if (number in line): flag = 1 if (flag): tmp_block.append(line) if (flag): blocks.append(tmp_block.copy()) print (blocks)
over 4 years ago · Hanz Gallego Report

0

Solo verifica si tu número buscado está en la cadena

 with open('text.txt') as input_data: lines = [i.rstrip('\n') for i in input_data.readlines()] blocks = [] number = "+99 9999 9999" while len(lines) != 0: if number in lines[0]: blocks.append(lines[:3]) lines = lines[3:]
over 4 years ago · Hanz Gallego Report

0

Aquí está tu respuesta:

 number = "+99 9999 9999" with open('text.txt') as input_data: lines = input_data.readlines() # Instead of looping over the lines, we # loop over an array of integers starting # from zero and ending at the (number of # lines in the file minus 1). # (Remember,python lists are zero indexed, thats why) for line_no in range(len(lines)): if number in lines[line_no]: # The current line print(lines[line_no], end="") # Print the next line print(lines[line_no+1], end="") # And the next one too print(lines[line_no+2], end="")
over 4 years ago · Hanz Gallego Report

0

Debido a que su código solo encuentra la línea que contiene el número que desea, puede configurar una bandera para imprimir el siguiente contenido hasta otro número:

 if __name__ == '__main__': number = "+99 9999 9999" task = 'task' wanted = False with open('text.txt') as input_data: for line in input_data: if number in line or wanted: wanted = True print(line.strip()) if line[:4] != task and number not in line: wanted = False
over 4 years ago · Hanz Gallego Report

0

Tienes la parte de lectura del archivo resuelta. Necesita averiguar la declaración de impresión.

Aquí está el código para cuidarlo. Para simplificar, asigné todos los datos del archivo a una variable. También modifiqué los datos de entrada. El primer conjunto tiene 3 filas para +99 9999 9999

 import re filedata = '''02/09/2020, 23:45 - +99 9999 9999: 02/09/2020 task A -Changes A task b Changes b task c Changes c 03/09/2020, 01:55 - +88 8888 8888: 2-SEP-2020 task c -Changes c task d Changes d 03/09/2020, 01:55 - +99 9999 9999: 2-SEP-2020 task e -Changes e task f Changes f''' number = '+99 9999 9999' for line in filedata.split('\n'): z = re.match(r"[+\d{2} \d{4} \d{4}]",line) if z: found = number in line if found: print (line)

Explicación del código anterior:

Para cada línea leída, haga una coincidencia de reg ex para +nn nnnn nnnn donde n es cualquier dígito (d denota dígito). El resultado se envía a z.

Si z tiene algún valor, se encontró una coincidencia. Si encontramos una coincidencia, querrá averiguar si la línea es +99 9999 9999 o algún otro patrón numérico.

Si el patrón coincide, entonces configura la bandera para encontrar. Si se encuentra la bandera, imprima la línea. Continúe imprimiendo la línea hasta que se encuentre el siguiente conjunto de líneas +nn nnnn nnnn. Cuando lo encuentre, verifique si es +99 9999 9999. Si no lo es, cambie la bandera a Falso. La condición found = number in line da como resultado Verdadero o Falso. Cuando la bandera es Falsa, sabemos que ha comenzado un conjunto diferente. Deja de imprimir las líneas.

Espero que esto explique. Si todavía tiene preguntas sobre la lógica, hágamelo saber.

La salida de esto será:

 02/09/2020, 23:45 - +99 9999 9999: 02/09/2020 task A -Changes A task b Changes b task c Changes c 03/09/2020, 01:55 - +99 9999 9999: 2-SEP-2020 task e -Changes e task f Changes f

Esto funcionará independientemente de cuántas filas tenga entre +99 9999 9999 y el siguiente conjunto de +nn nnnn nnnn donde n puede ser cualquier dígito.

Aquí está el código que necesita con la lectura del archivo:

 import re number = "+99 9999 9999" with open('text.txt') as input_data: for line in input_data: z = re.match(r"[+\d{2} \d{4} \d{4}]",line) if z: found = number in line if found: print (line)

Estoy haciendo algunas conjeturas salvajes sobre lo que está tratando de hacer aquí.

Supongamos que desea encontrar John +99 9999 9999 como una cadena en el archivo e imprimir todas las líneas asociadas a esto. Entonces aquí está el código.

 import re filedata = '''02/09/2020, 23:45 - John +99 9999 9999: 02/09/2020 task A -Changes A task b Changes b task c Changes c 03/09/2020, 01:55 - Suzan +88 8888 8888: 2-SEP-2020 task c -Changes c task d Changes d 03/09/2020, 01:55 - Thomas +99 9999 9999: 2-SEP-2020 task e -Changes e task f Changes f''' name = 'John' for line in filedata.split('\n'): z = re.findall(r"\w+ \+\d{2} \d{4} \d{4}",line) if z: found = (name in line) and (line[:4] != 'task') if found: print (line)

La salida de esto será:

 02/09/2020, 23:45 - John +99 9999 9999: 02/09/2020 task A -Changes A task b Changes b task c Changes c

Esto funcionará para los siguientes patrones de código:

 02/09/2020, 23:45 - John , Salesman +99 9999 9999: 02/09/2020 02/09/2020, 23:45 - John Salesman +99 9999 9999: 02/09/2020

Déjame saber lo que estás tratando de encontrar. Con suerte, todos estos ejemplos deberían ayudarlo a obtener lo que está buscando.

Basado en los nuevos datos que compartió, aquí está el código:

 filedata = """[23/9/20, 11:26:42 PM] John - Salesman: 23/09/2020 -task a -task b [23/9/20, 11:30:03 PM] Shawn - Support: 23/09/2020 -task c -task d [24/9/20, 9:54:44 PM]Shawn - Support: 24/09/2020 -task e -task f [24/9/20, 10:06:58 PM] Damien - Support: 24/09/2020 -task g -task h -task i -task j [24/9/20, 10:53:52 PM] John - Salesman: 24/09/2020 -task k -task l -task m -task n""" import re name = 'John - Salesman' for line in filedata.split('\n'): z = re.findall(r"([\w+ \- \w+:]*\d{2}\/\d{2}\/\d{4})",line) if z: found = (name in line) and (line[:4] != 'task') if found: print (line)

La salida de esto será:

 [23/9/20, 11:26:42 PM] John - Salesman: 23/09/2020 -task a -task b [24/9/20, 10:53:52 PM] John - Salesman: 24/09/2020 -task k -task l -task m -task n

En caso de que quiera jugar con la expresión regular, puede probarla aquí expresión regular

over 4 years ago · Hanz Gallego Report

0

Prueba este código,

Sintaxis de código

 path = 'extractiondata.txt' def scanner(path, input): with open(path) as file: lista = file.readlines() for index, each in enumerate(lista): if each[20:-13] == input: print(each) print(lista[index+1]) print(lista[index+2]) inp = input("please, Enter your input that you want to search for: ") scanner(path, inp)

Producción

 02/09/2020, 23:45 - +99 9999 9999: 02/09/2020 task A -Changes A task b Changes b 03/09/2020, 01:55 - +99 9999 9999: 2-SEP-2020 task e -Changes e task f Changes f
over 4 years ago · Hanz Gallego Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!