es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Convertir datos de huella dactilar en formato de texto con Python.

Soy un traductor de español que traduce documentos de tecnología de la información (IT). Traduzco lo siguiente al español. No traduzcas el código y la salida en Markdown.

Soy nuevo en Python

001,00025,1 2021/09/28 08:18:38 000
001,00012,1 2021/09/28 08:18:42 000
001,00027,1 2021/09/28 08:18:45 000
001,00011,1 2021/09/28 08:18:47 000
001,00025,1 2021/09/28 18:19:14 000
001,00012,1 2021/09/28 18:29:04 000
001,00027,1 2021/09/29 07:59:35 000
001,00025,1 2021/09/29 08:10:00 000
001,00011,1 2021/09/29 08:20:11 000
001,00027,1 2021/09/29 18:23:14 000
001,00025,1 2021/09/29 18:27:05 000

001,00012,1 2021/09/29 18:27:58 000

Solicito mi programa de ERP
personal; fecha y hora de ingreso; fecha y hora de salida como;

025;28.09.2021 08:18:38;28.09.2021 18:19:14

#import pandas as pd
import datetime

file =open("data.txt","r",encoding='utf-8')

users   = []
dates    = []
hours     = []

for i in file:
    year =int(i[12:16])
    mount  = int(i[17:19])
    day = int(i[20:22])
    hour = int(i[23:25])
    minute =int(i[26:28])
    second = int(i[29:31])

    date1 = datetime.date(year,mount,day)#.strftime("%d.%m.%Y %H:%M:%S")
    hour1 = datetime.time(hour,minute,second)#.strftime("%H:%M:%S")


    user =i[6:9]


    # if user == "025":
    #     if date1 == datetime.date(2021,9,28):
    #       cannot use min - max or if segment <> hour1

    users.append(f'{user}')
    dates.append(f'{date1}')
    hours.append(f'{hour1}')

Quiero imprimir los mismos usuarios y las mismas fechas como entrada y salida, en la misma línea, en un archivo diferente.

¿Cómo puedo hacerlo?

025;28.09.2021 08:18:38;28.09.2021 18:19:14
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para imprimir la salida deseada en un archivo diferente, puedes usar el siguiente fragmento de código:

    # importar los módulos necesarios
    import datetime
    
    # abrir el archivo de entrada
    with open("data.txt", "r") as archivo:
    
        # inicializar listas vacías para usuarios, fechas y horas
        usuarios = []
        fechas = []
        horas = []
    
        # iterar sobre cada línea en el archivo
        for linea in archivo:
    
            # extraer la información de fecha y hora de la línea
            año = int(linea[12:16])
            mes = int(linea[17:19])
            dia = int(linea[20:22])
            hora = int(linea[23:25])
            minuto = int(linea[26:28])
            segundo = int(linea[29:31])
    
            # crear objetos de fecha y hora
            fecha = datetime.date(año, mes, dia)
            tiempo = datetime.time(hora, minuto, segundo)
    
            # extraer el ID de usuario de la línea
            usuario = linea[4:7]
    
            # agregar el usuario, la fecha y la hora a sus respectivas listas
            usuarios.append(usuario)
            fechas.append(datetime.datetime.combine(fecha, tiempo))
    
        # abrir el archivo de salida
        with open("output.txt", "w") as salida:
    
            # iterar sobre cada usuario único en la lista
            for usuario in set(usuarios):
    
                # obtener los índices de todas las líneas que coinciden con el usuario actual en la lista
                indices = [i for i, x in enumerate(usuarios) if x == usuario]
    
                # extraer las fechas correspondientes a cada una de estas líneas
                fechas_subconjunto = [fechas[i] for i in indices]
    
                # obtener las fechas mínima y máxima
                fecha_inicio = min(fechas_subconjunto)
                fecha_fin = max(fechas_subconjunto)
    
                # formatear las fechas de inicio y fin como cadenas de texto
                fecha_inicio_str = fecha_inicio.strftime("%d.%m.%Y %H:%M:%S")
                fecha_fin_str = fecha_fin.strftime("%d.%m.%Y %H:%M:%S")
    
                # escribir el usuario y el rango de fechas en el archivo de salida
                salida.write(f"{usuario};{fecha_inicio_str};{fecha_fin_str}\n")
    

    Este código leerá los datos del archivo data.txt, extraerá la información relevante de usuario y fecha/hora, y luego escribirá la salida deseada en un nuevo archivo llamado output.txt. El archivo de salida contendrá líneas en el formato id_usuario;fecha_hora_inicio;fecha_hora_fin, donde fecha_hora_inicio y fecha_hora_fin corresponden a los valores de fecha/hora más tempranos y más recientes asociados con el usuario. Los valores de fecha/hora están formateados como cadenas de texto DD.MM.AAAA HH:MM:SS.

Comments are closed.