Python - Extraer fragmentos de texto de un archivo iterativamente

 
Vista:
sin imagen de perfil

Extraer fragmentos de texto de un archivo iterativamente

Publicado por Miguel (8 intervenciones) el 16/07/2021 18:37:51
Hola lo que pasa estoy generando un programa que contiene muchos datos y debo extraer el campo startime_local con su valor y guardarlo en otro archivo este campo se repite muchas veces, ejemplo:
call starttime="1626272690029" starttime_local="2021-07-14T09:24:50-0500" endtime="1626272695584"
call starttime="1626272694256" starttime_local="2021-07-14T09:24:54-0500" endtime="1626272695584"
call starttime="1626272677635" starttime_local="2021-07-14T09:24:37-0500" endtime="1626272695589"
y asis demasiadas veces lo intente como se muestra abajo pero no funciona alguna sugerencia de como modificar mi código.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import re
import msvcrt
import time
f = open ('SBC_IX_MX1XML_2021-07-14_14h24_55_UTC','r')
mensaje = f.read()
regex=r'starttime_local=' #Busca el delimitador inicial
regex2=r'"'     #Busca el delimitador final
print(regex)
print(regex2)
coincidencia = re.finditer(regex, mensaje)
coincidencia2 = re.finditer(regex2, mensaje)
for matchNum, match in enumerate(coincidencia):
 
 for matchNum1, match1 in enumerate(coincidencia2):
    print (match.group())
    split_1 = mensaje.split(match.group())
    print( match1.group())
    text = ' '.join(' '.join(split_1).strip().split(match1.group()))
 
    final_file = open("Datos"+".txt", "w")
    final_file.write(text)
    final_file.close()
    text=""
    break
    matchNum1 = matchNum1 + 1
    matchNum = matchNum + 1
print("Presione una tecla para continuar...")
msvcrt.getch()
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Extraer fragmentos de texto de un archivo iterativamente

Publicado por tincopasan (1082 intervenciones) el 16/07/2021 20:06:53
Una pregunta, ¿las lineas del archivo están tal cual en el ejemplo?
porque si es as,í es más simple de lo que parece, si te fijas los datos están separados por espacios, entonces lees linea a linea y despues la convertis en una lista y obtenes el índice que quieras:

1
2
3
linea='call starttime="1626272690029" starttime_local="2021-07-14T09:24:50-0500" endtime="1626272695584"'
dato=linea.split()[2]
print(dato)

Si no poné de forma más exacta la estructura real del archivo a leer y varias lineas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Extraer fragmentos de texto de un archivo iterativamente

Publicado por Miguel (8 intervenciones) el 16/07/2021 20:26:14
Mas o menos esta es la estructura que lleva el documento son demasiados campos y busco recuperar solo el starttime_local="el valor"


1
2
3
4
5
6
7
8
9
10
11
12
13
14
<mlns=""=""><call starttime="1626272687142" starttime_local="2021-07-14T09:24:47-0500" endtime="1626272695584" endtime_local="2021-07-14T09:24:55-0500" duration="" release_side="" bcid=""><party type="orig" phone="" domain="" sig_address="" sig_port="" sig_transport="" sip_call_id=""/><party type="term" domain="" sig_address="" sig_port="" sig_transport="" sip_call_id=""/><adjacency type="" name="" account="" vpnid="" mediarealm=""/><adjacency type="" name="" account="" vpnid="" mediarealm=""/><connect time=""/><release reason=""/><terminated /><post_dial_delay duration=""/><QoS stream_id="" instance="" reservetime="" reservetime_local="" committime="" committime_local="" releasetime="" releasetime_local=""><gate><flowinfo><local address="" port=""/><remote address="" port=""/><sd>m=audio
a=rtpmap:
a=rtpmap:
a=fmtp:
a=fmtp:
a=maxptime:
a=ptime:
<call starttime="1626272687142" starttime_local="2021-07-14T09:24:50-0500" endtime="" endtime_local="2021-07-14T09:24:55-0500" duration="" release_side="" bcid=""><party type="" phone="" domain=""><gate><flowinfo><local address="" port=""/><remote address="" port=""/><sd>m=audio 0 RTP/AVP 8 101
a=rtpmap:
a=rtpmap:
a=fmtp:
a=maxptime:
a=rtpmap:
a=rtpmap:
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Extraer fragmentos de texto de un archivo iterativamente

Publicado por tincopasan (1082 intervenciones) el 16/07/2021 21:44:57
pero es que estamos en la misma, modificando tu código y en base a la estructura de archivo que pusiste, con menos ya debería andar:

1
2
3
4
5
6
7
8
9
10
11
#-*- coding: utf  -8 -*-
import msvcrt
 
with open ('SBC_IX_MX1XML_2021-07-14_14h24_55_UTC.txt') as archivo:
    mensaje = archivo.read().split()
datos=[x for x in mensaje if x[:12]=="starttime_lo"]
with open("Datos.txt", "w") as archivo_final:
    for x in datos:
        archivo_final.write(x+"\n")
print("Presione una tecla para continuar...")
msvcrt.getch()

Sino funciona es que es distinta la estrucura del archivo a leer.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Extraer fragmentos de texto de un archivo iterativamente

Publicado por Miguel (8 intervenciones) el 16/07/2021 22:08:31
Amigo encerio me salvaste la vida, funciono perfecto tu solucion, gracias por el apoyo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Extraer fragmentos de texto de un archivo iterativamente

Publicado por Miguel (8 intervenciones) el 19/07/2021 21:08:53
Hola amigo una duda, ando en el mismo problema de la vez pasada y tu solución funciono pero ahora trato de extraer el campo party type=""
pero al ejecutar
1
2
3
with open ('SBC_IX_MX1XML_2021-07-14_14h24_55_UTC.txt') as archivo:
    mensaje = archivo.read().split()
parttype=[x for x in mensaje if x[:3]=="sip"]


en el list el campo queda dividido de la siguiente forma:
sip_call_id=""/><party,
type="term"

y no encuentro forma de buscar obtener solo ese campo ya que otros campos quedan divididos igual con el type al principio y note que ese campo antes tiene el campo sip_call_id=""/>< alguna forma ? realmente soy nuevo en python y ocupo ayuda pues quiero una forma de decir que obtenga la siguiente posicion de la actual de x en el ciclo for


<mlns="" xmlns=""><call starttime="" starttime_local="" endtime="" endtime_local="" duration="" release_side="" bcid=""><party type="" phone="" domain="" sig_address="" sig_port="" sig_transport="" sip_call_id=""/><party type="term" phone="" domain="" sig_address="" sig_port="" sig_transport="" sip_call_id=""/><adjacency type="" name="" account="" vpnid="" mediarealm=""/><adjacency type="term" name="" account="" vpnid="" mediarealm=""/><connect time=""/><release reason=""/><terminated /><post_dial_delay duration=""/><QoS stream_id="" instance="" reservetime="" reservetime_local="" committime="" committime_local="" releasetime="" releasetime_local=""><gate><flowinfo><local address="" port=""/><remote address="" port=""/><sd>m=/AVP
a=
a=
a=
a=
a=
a=
</sd><RTCPstats>PS=, OS=, PR=, OR=, PD=, OD=, PL=, JI=, TOS=, TOR=, LA=, PC/RPS=, PC/ROS=, PC/RPR=, PC/RPL=, PC/RJI=, PC/RLA=, RF=, MOS=, PC/RAJ=, PC/RML=</RTCPstats></flowinfo><flowinfo><local address="" port=""/><remote address="" port=""/><sd>m= RTP/AVP
a=
a=
a=
a=
a=
a=
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Extraer fragmentos de texto de un archivo iterativamente

Publicado por tincopasan (1082 intervenciones) el 19/07/2021 23:03:14
1) la verdad es que no se si entendí tu planteo, pero de acuerdo a lo que creo es:
1
2
3
4
5
with open ('SBC_IX_MX1XML_2021-07-14_14h24_55_UTC.txt') as archivo:
    mensaje = archivo.read().split()
    parttype =[mensaje[x+1] for x in range(len(mensaje)) if mensaje[x].startswith("sip_") and mensaje[x].endswith("party") ]
 
print(parttype)
Sino ya tenés una idea de como buscar.
2)la excusa de soy nuevo en python me parece muy mala, todos iniciamos y aprendemos muchas veces sin ayuda , pero hay que leer y practicar, no esperar todo hecho.
3)tu lóqica no está mal, deberías haber visto como se obtienen los índices de una lista, hay miles de tutoriales.
4) te ayudo en esta, pero si vuelves a plantear una duda sin haber intentado algo, no lo haré, por más que sepa como.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Extraer fragmentos de texto de un archivo iterativamente

Publicado por Miguel (8 intervenciones) el 21/07/2021 16:27:06
Amigo de nuevo gracias y si lo había intentado de echo mi idea originales era mas o menos hacerlo asi:
1
2
3
4
for x in mensaje:
        if mensaje[x:4]=="sip_":
           #asignar a una variable el numero de posicion donde se encontraba y sumarle una
           y=mensaje.index.(x)+1

y luego decirle que lo que hubiera en esa posición lo agregara pero fue donde empecé a perderme, pero ya ando leyendo la documentación para evitar ese tipo de comentarios y se agradece tu ayuda y comentarios
Muy bueno
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar