Actualmente estoy tratando de separar parte de la información que tengo en un archivo csv. Toda la información se separa mediante ':'. He aquí un ejemplo:

    1234567890:0987654321234:Hino:Rei:Texas:07/12/2021 12:00:00 AM::

Estoy tratando de separar los valores, pero no quiero incluir la marca de tiempo después de la fecha. Actualmente, lo estoy haciendo así:

read = csv.reader(csv_f, delimiter=":")
for row in read:
    print(row)

Y el resultado que obtengo es:

['1234567890', '0987654321234', 'Hino', 'Rei', 'Texas', '07/12/2021 12', '00', '00 AM', '', '']

El resultado que estoy tratando de obtener es este:

['1234567890', '0987654321234', 'Hino', 'Rei', 'Texas', '07/12/2021', '12:00:00 AM', '', '']

¿Alguien tiene alguna sugerencia sobre cómo puedo solucionarlo? Por alguna razón, me viene a la mente la expresión regular, pero no estoy del todo seguro ...

0
rand03 12 jul. 2021 a las 21:52

3 respuestas

La mejor respuesta

Creo que sería mejor tener un delimitador diferente en el archivo csv que : pero si eso no es posible.

Puede modificar su salida actual de la siguiente manera:

# current output
output = ['1234567890', '0987654321234', 'Hino', 'Rei', 'Texas', '07/12/2021 12', '00', '00 AM', '', '']

# split thins up
first_part = output[:-5]
second_part = output[-5:]

# combine things back to date and time
tmp = ':'.join(second_part[:-2]).split(' ')
date = tmp[0]
time = ' '.join(tmp[1:])
0
sehan2 12 jul. 2021 a las 18:57

Como solución a su problema, puede procesar la lista de salida de acuerdo con sus necesidades:

read = read[:-5] + read[-5].split()[0] + [":".join([read[-5].split()[1]] + [read[-4:-2]])]

Tenga en cuenta que esta es una solución alternativa basada en el formato de datos, por lo que debe asegurarse de que todo su csv siga el mismo patrón.

0
Max Shouman 12 jul. 2021 a las 19:11

Después de leer una fila, puede fusionar esos elementos de la matriz usando una asignación de sector:

read = csv.reader(csv_f, delimiter=":")
for row in read:
    row[5:6] = [':'.join(row[5:8])]
    print(row)
0
Barmar 12 jul. 2021 a las 19:21