Python - Leer archivos txt en python/ colocar informacion en columnas

 
Vista:
sin imagen de perfil
Val: 68
Ha disminuido su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Leer archivos txt en python/ colocar informacion en columnas

Publicado por María (22 intervenciones) el 03/08/2020 18:16:53
Hola,

Tengo un archivo con datos. La primera columna se corresponde con datos de tiempo y la segunda a presiones.
Quiero leerlo y separarlo en columnas y no que me cree una lista. Para luego quitar ciertos caracteres que llevan los datos de tiempo.

No se hacer ninguna de las dos cosas y no quiero que sea con el uso de dataframe que ya lo hice y eso no me vale para otra cosa que tengo quehacer posteriormente,

EL código que llevo:

1
2
3
4
5
6
import numpy as np
file=open('fichero.txt','r')
lines=file.readlines()
 
data=np.asarray(lines)
d=data.split(',')

¿Podría alguien ayudar por favor?
UN saludo,
María R.P.
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 joel
Val: 3.475
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Leer archivos txt en python/ colocar informacion en columnas

Publicado por joel (901 intervenciones) el 04/08/2020 08:49:14
Hola Maria, ayer cuando lo tratamos en el chat, me quedo una duda...

Cuando hablamos del fichero.txt, me indicaste que habia este formato:
1
2
00066M00:00:00.048,738.7165
00066M00:00:00.145,738.7028
y entendi que tardaba siempre milisegundos... pero luego me mostraste este contenido para el fichero.txt
1
2
3
4
5
6
7
8
9
10
11
12
00066M01:14:36.031,739.342
00066M01:14:36.128,739.3508
00066M01:14:36.225,739.3395
00066M01:14:36.323,739.3426
00066M01:14:36.420,739.3497
00066M01:14:36.517,739.353
00066M01:14:36.615,739.3504
00066M01:14:36.712,739.3459
00066M01:14:36.809,739.3566
00066M01:14:36.907,739.3491
00066M01:14:37.004,739.3274
00066M01:14:37.101,739.3286
Y parece ser que el tiempo empieza en un momento dado, y se va incrementando?? o es la hora en que se realiza la peticion??
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: 68
Ha disminuido su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Leer archivos txt en python/ colocar informacion en columnas

Publicado por María (22 intervenciones) el 04/08/2020 13:11:31
Hola,

Lo que me muestras y que es lo que puse en el chat, son parte de la información que viene en fichero a leer. Parte de lo que hay al principio del fichero y parte de lo que hay hacia el final. Con ello quería mostrar como varia el tiempo.
La cosa esta en que:
-quiero quitar el 00066M01
-pasar todo a minutos, es decir por ejemplo el momento 01:14:37.101 pasarlo todo a minutos. ¿por qué? porque tengo que hacer después promedios de la presión por cada cinco minutos.

MI idea general era:
Leo el archivo > paso a minutos > pongo un bucle for con cierta condición para ir metiendo en algún sitio los tiempos que hay en un intervalo de cinco minutos y en otro sitio las presiones que corresponden > hacer el promedio de las presiones por cada intervalo de cinco minutos.

Está difícil lo se, pero gracias por intentarlo Joel.

Un saludo,
María R.P.
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 joel
Val: 3.475
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Leer archivos txt en python/ colocar informacion en columnas

Publicado por joel (901 intervenciones) el 04/08/2020 17:26:28
Hola Maria, haber si te sirve este código para continuar...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import numpy as np
file=open('fichero.txt','r')
lines=file.readlines()
 
data=np.asarray(lines)
 
def calcular(el):
    (tiempo, valor)=el[6:].strip().split(",")
    tiempo=sum(map(lambda x: float(x[1])*60*60 if x[0]==0 else float(x[1])*60 if x[0]<=1 else float(x[1]), enumerate(tiempo.split(":"))))
    return [tiempo, float(valor)]
 
result=list(map(calcular, data))
 
print(result)

Lo que devuelve es una lista de listas con este contenido:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[
 [0.048, 738.7165],
 [0.145, 738.7028],
 [4476.031, 739.342],
 [4476.128, 739.3508],
 [4476.225, 739.3395],
 [4476.323, 739.3426],
 [4476.42, 739.3497],
 [4476.517, 739.353],
 [4476.615, 739.3504],
 [4476.712, 739.3459],
 [4476.809, 739.3566],
 [4476.907, 739.3491],
 [4477.004, 739.3274],
 [4477.101, 739.3286]
]

Es la suma de los segundos con el valor recibido.

Espero que te sirva
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
sin imagen de perfil
Val: 68
Ha disminuido su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Leer archivos txt en python/ colocar informacion en columnas

Publicado por María (22 intervenciones) el 04/08/2020 20:07:46
Hola Joel,

Pero francamente...no pillo nada. En Internet pone que lo de lambda es un modo abreviado de usar las funciones def, sin embargo tu lo usas dentro de una función def.

Y de la línea:
tiempo=sum(map(lambda x: float(x[1])*60*60 if x[0]==0 else float(x[1])*60 if x[0]<=1 else float(x[1]), enumerate(tiempo.split(":"))))
no hay manera de seguirte lo que haces.

No entiendo a qué llamas x.
Intuyo que con x[1] accedes a unos datos, pero ¿por qué no usas la variable data?¿data[0], data[1]...?
Luego usas float, que se que se usa para números con decimales y usandolo estas conviertendo u string a número no?
y luego las condiciones que estableces no se por qué hay que ponerlas...
Con x[1] intuyo que accedes a las horas, aunque yo con x[1] pienso que accedes a los minutos, en cualquier caso no entiendo porque lo multiplicas por 3600 solo en caso de que x[0] equivalga a cero.

Menudo follón es para mi pero gracias por intentarlo. Seguiré investigando.
Un saludo,
María R.P
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 joel
Val: 3.475
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Leer archivos txt en python/ colocar informacion en columnas

Publicado por joel (901 intervenciones) el 05/08/2020 12:13:21
puede ser un tanto complicado ... luego intento hacerte una versión mas amigable...
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: 68
Ha disminuido su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Leer archivos txt en python/ colocar informacion en columnas

Publicado por María (22 intervenciones) el 06/08/2020 00:19:02
Te lo agradecería...porque...no hay por donde cogerlo. Las preguntas ya te les dejé más arriba y en fin...demoledor esta siendo.
Pero puedas o no, gracias que se que es difícil.

Un saludo,
María R.P.
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 joel
Val: 3.475
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Leer archivos txt en python/ colocar informacion en columnas

Publicado por joel (901 intervenciones) el 06/08/2020 10:35:41
Si, si, las vi, pero es un tanto complicado de explicar... tendria que empezar por entender correctamente la función enumerate(), las funciones lambda y el operador ternario.

Puede sonar un tanto liado, pero es sencillo... haber si coincidimos en el chat y te intento comentar las dudas.
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: 68
Ha disminuido su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Leer archivos txt en python/ colocar informacion en columnas

Publicado por María (22 intervenciones) el 06/08/2020 19:59:27
Jolin, pues muchas muchas gracias. Sii a ver si coincidimos que asi comentandolo me parece mas educativo. No me interesa copiar sin mas.
MIra, te dejo aqui a ver que te parece un código que me ando inventando tras investigar. He conseguido quitar el 00066M y también guardar la información del tiempo en columnas distintas, en la variable t. Asi por ejemplo al poner en spyder (que es el editor que uso) t me sale:

blablabla

['00', '01', '35.717'],
['00', '01', '35.814'],
['00', '01', '35.912'],
['00', '01', '36.009'],
['00', '01', '36.106'],
['00', '01', '36.204'], blablabla ect



El caso es que yo necesito tratar cada elemento por separado en plan: t[0]*60 y t[2]/60 y pensaba hacerlo asi. Y es que yo pensaba que poniendo entre corchetes la posición accedias. Pero no hay manera.

Te dejo aqui mi código. Esta noche estaré al tanto de si contestas. Y mañana (viernes 7 de agosto) por la mañana estaré conectada. SI me esccribes al foro en plan aviso, me llega al móvil. Como creas oportuno. Y muchas gracias.

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
file= "Maria.txt"
file_mod= file.replace(".txt","")
file_mod=file_mod + "_mod.txt"
 
mod_file=open(file_mod,'w')
raw_file=open (file,'r')
 
for x in raw_file:
    xf = x.replace("00066M","")
    mod_file.write(xf)
    #print(x) # Imprime valor original
    #print(xf) # Imprime valor modificado
 
data= [] #crea lista
with open('Maria_mod.txt','r') as archivo:
    lineas = archivo.read().splitlines() # splitlines() divide la informacion por lineas
    lineas.pop(0)# para sacasr el título porque no me interesa
    #print("-----"+"\n"+str(lineas))
    for l in lineas: #separa cada elemento en cada línea
        linea=l.split(',')
        data.append([linea[0], float(linea[1])])
        #data.append([float(linea[0]),float(linea[1])])
 
t=[]
P=[]
for elem in data:
    t.append((elem[0]).split(":"))
    P.append(elem[1])
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: 68
Ha disminuido su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Leer archivos txt en python/ colocar informacion en columnas

Publicado por María (22 intervenciones) el 04/08/2020 20:45:16
jo...no hay manera.
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