Python - leer archivo log y almacenarlo en vectores

   
Vista:

leer archivo log y almacenarlo en vectores

Publicado por tonino tonino_2004a@hotmail.com (9 intervenciones) el 02/04/2013 04:40:13
Hola a todos, agradesco su apoyo de antemano.

Revisando el foro halle algunas soluciones a mis problema (leer un archivo log en python 2.7 y separar por columnas o en listas cada fila), por ejemplo tengo este tipo de texto (log)


perdon por las preguntas talves muy obvias, soy nuevo en python....

el archivo...
------------------------------------------------------------------------------------------------------------------------------
04/07/2008 12:03:57 Usat LP1B MB1 Trou dans les données pour [04/07/2008 12:03:00, 04/07/2008 12:03:20[ (1 trame(s), 20000 ms)

04/07/2008 11:59:51 Usat LP1B MB1 Trou dans les données pour [04/07/2008 11:59:00, 04/07/2008 11:59:20[ (1 trame(s), 20000 ms)
-----------------------------------------------------------------------------------------------------------------------
con el siguiente codigo intento almacenar los archivos en varios vectores, ya que solo me importan los datos de las horas de inicio (12:03:57), horas de fin (12:03:20) y el tiempo de las tramas (20000)

1
2
3
4
5
6
7
8
9
10
11
12
import csv
fich=open('030708h1.log','r')
myread=csv.reader(fich,delimiter='\t')
for line in myread:
    fecha=line[0]
    hora=line[1]
    protocolo=line[2]
.
.
.
etc...
fich.close()


Luego en el IDLE typeo fecha y solo me da como reultado
'04/07/2008 12:03:57'

no me devuelve el vector con las otras fechas (perdon la redundancia)...

Como podria hacer que m de toda la informacion en una lista o vector..gracias de antemano
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
Imágen de perfil de xve

leer archivo log y almacenarlo en vectores

Publicado por xve (1237 intervenciones) el 02/04/2013 08:07:02
Hola Tonino, es que cada vez que lo ejecutas, estas sobre escribiendo la variable, no estas creando una lista... es decir, fecha siempre tendrá el valor de la ultima linea.

Para crear una lista, primer la tendrias que definir como tal:
1
fecha=[]

y luego para añadir valores seria algo como:
1
fecha.append(line[0])


Coméntanos si te sirve, ok?
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

leer archivo log y almacenarlo en vectores

Publicado por tonino tonino_2004a@hotmail.com (9 intervenciones) el 03/04/2013 16:43:44
Gracias XVE!!!
Sirve..entonces el codigo seria...

-------------------------------------------------
1
2
3
4
5
6
7
8
9
10
11
12
import csv
arch=open('test_txt.log','r')
camp1=[]
camp2=[]
camp3=[]
lineas=csv.reader(arch)
for leo in lineas:
    camp1.append(leo[0])
    camp2.append(leo[1])
    camp3.append(leo[2])
    lineas=csv.reader(arch,delimiter=',')
arch.close()

------------------------------------
el resultado seria...

>>> camp3
[' 20000 ms)', ' 20000 ms)', ' 60000 ms)', ' 60000 ms)', ' 20000 ms)']

---------------------------------------

Ahora intentare filtrar la lista y solo obtener los valores numericos, despues tomar esa lista solo con vaalores numericos y volverlo un vector para la suma...no se si esmu cha molestia pero puedes revisar este flujograma....

1. adquiero la lista en el vector camp3.
2. filtro la lista elimino los strings (ms)
3. dejo solo los numeros en un nuevo vector camp_f
4. sumo, promedio y listo.

Gracias, estare enviando actualizaciones...
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
Imágen de perfil de xve

leer archivo log y almacenarlo en vectores

Publicado por xve (1237 intervenciones) el 03/04/2013 17:18:46
Hola Tonino, gracias por comentarlo...

Sobre lo que me comentas del flujo, yo lo haria así:
1. adquiero los valores numericos en el vector camp3.
2. sumo, promedio y listo.

Al cargar la lista, carga únicamente los valores que desees, no hace falta que cargues las cadenas.
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

leer archivo log y almacenarlo en vectores

Publicado por tonino tonino_2004a@hotmail.com (9 intervenciones) el 04/04/2013 22:08:40
DIstinguido XVE.

gracias por la sugerencia, pero no logro hacer que camp3 solo sea de numeros, intente filtrar la lista con este pedazo de codigo.

1
2
3
4
5
camp3=[' 20000 ms)', ' 20000 ms)', ' 60000 ms)', ' 60000 ms)', ' 20000 ms)']
temp=[]
for item in camp3:
    if item.find(". ms)") != -1:
        temp.append(item)


y no consigo eliminar los ms), alguna idea?, muchas gracias de antemano

Tonino
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

leer archivo log y almacenarlo en vectores

Publicado por tonino tonino_2004a@hotmail.com (9 intervenciones) el 05/04/2013 05:16:30
Mejor esta este código....

-------------------------------------------------------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import csv
import string
fich=open('test.log','r')
myread=csv.reader(fich,delimiter=',')
dat1=[]
dat2=[]
dat3=[]
suma=[]
line_l=[]
for line in myread:
    dat1.append(line[0])
    dat2.append(line[1])
    dat3.append(line[2])
fich.close()
u_s=string.join(dat3)
line_l=string.split(u_s)


-----------------------------------------------------------
lo cual me permite tener una salida:

line_l
['20000', 'ms)', '20000', 'ms)', '60000', 'ms)', '60000', 'ms)', '20000', 'ms)']

ahora creo que tambien puedo filtrar la lista de mejor manera no??, alguna otra idea??

Gracias.
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
Imágen de perfil de xve

leer archivo log y almacenarlo en vectores

Publicado por xve (1237 intervenciones) el 05/04/2013 07:23:42
Hola Tonino, si todos los valores son siempre iguales, puedes eliminar los últimos 4 caracteres... algo así:
1
2
3
4
5
6
7
for line in myread:
    dat1.append(line[0])
    dat2.append(line[1])
    if " ms)" in line[2]:
        dat3.append(int(line[2][:-4]))
    else:
        dat3.append(int(line[2]))


De esta manera, coges el valor menos los últimos 4 caracteres y lo pasas a entero...

Espero que te sirva... coméntanos, ok?
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

leer archivo log y almacenarlo en vectores

Publicado por tonino tonino_2004a@hotmail.com (9 intervenciones) el 07/04/2013 00:22:20
Hola XVE!!!

espero q el fincho sea super!!!..te comento que el codigo funciono de maravilla...aca lo posteo.
-----------------------------------------------------------------------------------------------------------------------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
##Inspiración y ayuda de XVE
import csv
import string
fich=open('test.log','r')
myread=csv.reader(fich,delimiter=',')
dat1=[]
dat2=[]
dat3=[]
for line in myread:
    dat1.append(line[0])
    dat2.append(line[1])
    if " ms)" in line[2]:
        dat3.append(int(line[2][:-4]))
    else:
        dat3.append(int(line[2]))
fich.close()


-----------------------------------------------------------------------------------------------------------------

No es muy estetico el codigo que propongo pero espero que tambien sirva a alguien....

---------------
##Ayuda de XVE y algo de Tonino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import csv
import string
import math
## Abro el archivo que interesa
fich=open('test.log','r')
##leo el archivo
myread=csv.reader(fich,delimiter=',')
##defino las variables donde se gurdaran las otras lineas del log
dat1=[]
dat2=[]
dat3=[]
line_l=[]
st_t=[]
##Se crea un for para leer todo el archivo y almaceno en variables
##los string del texto
for line in myread:
    dat1.append(line[0])
    dat2.append(line[1])
    dat3.append(line[2])
fich.close() ## cierro el archivo para no causar daños
u_s=string.join(dat3) ## Uno en una sola cadena los datos q me interesan
line_l=string.split(u_s) ## elimino los espacios
st_t=[elem for elem in line_l if len(elem) >=5] ## permito que se queden solo numeros
st_t=[int(i) for i in st_t] ## convierto de string a int


--------------------------------------------------------------------------------------------

GRACIAS...ahora a sumar, seguire posteando y actualizando este programita, me entere que python tambien grafica en HTML...increible!!!!

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de xve

leer archivo log y almacenarlo en vectores

Publicado por xve (1237 intervenciones) el 07/04/2013 20:46:11
Muchas gracias por comentarlo Tonino, y me alegro de que te sirviera de ayuda!!!
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

leer archivo log y almacenarlo en vectores

Publicado por tonino tonino_2004a@hotmail.com (9 intervenciones) el 21/04/2013 05:06:48
hola XVE..aca va el programa que tb escribe a un txt de salida....

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
29
30
31
32
33
34
35
36
37
38
39
40
41
# -*- coding: cp1252 -*-
## otro script para leer en columnas..con csv
##Importo librerias a usar
import csv
import string
import math
import random
## Abro el archivo que interesa
fich=open('030708h1.log','r')
##leo el archivo
myread=csv.reader(fich,delimiter=',')
##defino las variables donde se gurdaran las otras lineas del log y sumas, etc
dat1=[]
dat2=[]
dat3=[]
line_l=[]
st_t=[]
suma=0
##Se crea un for para leer todo el archivo y almaceno en variables
##los string del texto
for line in myread:
    dat1.append(line[0])
    dat2.append(line[1])
    dat3.append(line[2])
fich.close() ## cierro el archivo para no causar daños
u_s=string.join(dat3) ## Uno en una sola cadena los datos q me interesan
line_l=string.split(u_s) ## elimino los espacios
st_t=[elem for elem in line_l if len(elem) >=5] ## permito que se queden solo numeros
st_t=[int(i) for i in st_t] ## convierto de string a int
##Sumando los elemetos....
for ii in range(0,len(st_t)):
	suma=suma+st_t[ii]
suma=suma/1000.00
suma=(((suma/86400.00)*100.00)-100.00)*(-1)
print suma
porce=open('porcentajes.txt','a')
porce.write('Porcetaje de Tramas desde IS08 al OSC\n')
porce.write('H1=')
porce.write(str(suma))
porce.write('\n')
porce.close()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

leer archivo log y almacenarlo en vectores

Publicado por tonino tonino_2004a@hotmail.com (9 intervenciones) el 23/04/2013 04:51:09
Holas super XVE...yo de nuevo acacon dudas.....
y si tuviese 4 archivos similares y los quisiera abrir en paralelo y realizar el mismo procedimiento de lectura, discriminar ciertas columnas, sumar y sacar el promedio estaria bien realizar esta operación que alle googlenado, la probe y no corre puede ser que haya cometido un error

1
2
3
4
5
6
7
8
9
10
11
12
13
## lee dos archivos
class openTwoFiles():
    def __init__(self, file1, file2):
        self.fn1 = file1
        self.fn2 = file2
    def __enter__(self):
        self.f1 = open(self.fn1,'r')
        self.f2 = open(self.fn2,'r')
        return (self.f1, self.f2)
 
    def __exit__(self, type, value, traceback):
        self.f1.close()
        self.f2.close()


luego dicen...q asi se debe usar....es similar a una función verdad???

1
2
3
with openTwoFiles('test.txt','test2.txt') as (f1,f2):
        print f1
        print f2


pero me sale el siguiente error:

Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
with openTwoFiles('030708_h1.log','030708_h2.log') as (f1,f2):
NameError: name 'openTwoFiles' is not defined


Gracias de antemano por la ayuda
Tonino
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
Imágen de perfil de xve

leer archivo log y almacenarlo en vectores

Publicado por xve (1237 intervenciones) el 23/04/2013 08:55:53
Hola Tonino, lo que te esta indicando es que no encuentra la clase openTwoFiles... por el resto, parece que esta todo correcto...

Donde defines la clase?
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