primer comit
This commit is contained in:
72
README.md
Normal file
72
README.md
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
# 🧹 Limpieza de Recibos de Sueldo — Script Python
|
||||||
|
|
||||||
|
Este script automatiza la eliminación de recibos de sueldo antiguos, conservando únicamente los recibos correspondientes a los **últimos 5 meses**. Está diseñado para ejecutarse en entornos donde los recibos se almacenan en formato PDF con un nombre estructurado.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📂 Ubicación esperada de los archivos
|
||||||
|
|
||||||
|
El script busca archivos en el siguiente directorio:
|
||||||
|
|
||||||
|
/mnt/xxxxxx/Recibos_sueldo/
|
||||||
|
|
||||||
|
Código
|
||||||
|
|
||||||
|
Los archivos deben tener el siguiente formato:
|
||||||
|
|
||||||
|
Recibo_<DNI><Apellido><YYYYMM>.pdf
|
||||||
|
|
||||||
|
Código
|
||||||
|
|
||||||
|
Ejemplo válido:
|
||||||
|
|
||||||
|
Recibo_12345678_Perez_202403.pdf
|
||||||
|
|
||||||
|
Código
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚙️ ¿Qué hace el script?
|
||||||
|
|
||||||
|
- Calcula el periodo límite correspondiente a hace 5 meses desde la fecha actual.
|
||||||
|
- Escanea todos los archivos PDF que coincidan con el patrón `Recibo_*.pdf`.
|
||||||
|
- Extrae el periodo (YYYYMM) desde el nombre del archivo.
|
||||||
|
- Elimina los archivos cuyo periodo sea anterior al límite calculado.
|
||||||
|
- Ignora archivos mal nombrados que no respeten el formato esperado.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🛡️ Seguridad y tolerancia a errores
|
||||||
|
|
||||||
|
- Archivos con nombres inesperados son ignorados silenciosamente.
|
||||||
|
- Si ocurre un error al borrar un archivo (por permisos, bloqueo, etc.), se muestra un mensaje de error detallado.
|
||||||
|
- Se informa cuántos archivos fueron eliminados al finalizar.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Cómo ejecutar
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python3 limpiar_recibos_por_mes_final.py
|
||||||
|
📋 Ejemplo de salida
|
||||||
|
Código
|
||||||
|
## LIMPIEZA DE RECIBOS ANTIGUOS (LÓGICA DE 5 MESES) ##
|
||||||
|
Se conservarán los recibos desde el periodo 202403 en adelante.
|
||||||
|
|
||||||
|
Borrando los siguientes archivos:
|
||||||
|
Borrado: /mnt/bases_isis/Recibos_sueldo/Recibo_12345678_Perez_202210.pdf
|
||||||
|
Borrado: /mnt/bases_isis/Recibos_sueldo/Recibo_87654321_Gomez_202212.pdf
|
||||||
|
|
||||||
|
Limpieza completada. Se han borrado 2 recibos antiguos.
|
||||||
|
📦 Requisitos
|
||||||
|
Python 3.x
|
||||||
|
|
||||||
|
Acceso de escritura al directorio /mnt/bases_isis/Recibos_sueldo/
|
||||||
|
|
||||||
|
Archivos con formato Recibo_<DNI>_<Apellido>_<YYYYMM>.pdf
|
||||||
|
|
||||||
|
🧠 Notas adicionales
|
||||||
|
Este script puede integrarse fácilmente en tareas programadas (cron jobs) para mantener limpio el almacenamiento de recibos de forma automática.
|
||||||
|
|
||||||
|
🛠️ Autor
|
||||||
|
Desarrollado por Nahuel —.
|
58
limpiar_recibos_viejos.py
Executable file
58
limpiar_recibos_viejos.py
Executable file
@ -0,0 +1,58 @@
|
|||||||
|
import os
|
||||||
|
import glob
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
def limpiar_recibos_por_mes_final():
|
||||||
|
"""
|
||||||
|
Elimina los recibos de sueldo antiguos, conservando todos los recibos
|
||||||
|
de los últimos 5 meses.
|
||||||
|
"""
|
||||||
|
directorio_recibos = '/mnt/bases_isis/Recibos_sueldo/'
|
||||||
|
patron_archivos = os.path.join(directorio_recibos, 'Recibo_*.pdf')
|
||||||
|
|
||||||
|
# Calcular el periodo límite (YYYYMM) de hace 5 meses
|
||||||
|
hoy = datetime.now().date()
|
||||||
|
año_actual = hoy.year
|
||||||
|
mes_actual = hoy.month
|
||||||
|
|
||||||
|
mes_limite = mes_actual - 5
|
||||||
|
año_limite = año_actual
|
||||||
|
if mes_limite <= 0:
|
||||||
|
mes_limite += 12
|
||||||
|
año_limite -= 1
|
||||||
|
|
||||||
|
periodo_limite = f"{año_limite:04d}{mes_limite:02d}"
|
||||||
|
|
||||||
|
print(f"## LIMPIEZA DE RECIBOS ANTIGUOS (LÓGICA DE 5 MESES) ##")
|
||||||
|
print(f"Se conservarán los recibos desde el periodo {periodo_limite} en adelante.")
|
||||||
|
|
||||||
|
todos_los_archivos = glob.glob(patron_archivos)
|
||||||
|
archivos_para_borrar = []
|
||||||
|
archivos_borrados_count = 0
|
||||||
|
|
||||||
|
for path_archivo in todos_los_archivos:
|
||||||
|
try:
|
||||||
|
nombre_archivo = os.path.basename(path_archivo)
|
||||||
|
periodo_archivo = nombre_archivo.split('_')[3]
|
||||||
|
|
||||||
|
if periodo_archivo < periodo_limite:
|
||||||
|
archivos_para_borrar.append(path_archivo)
|
||||||
|
except IndexError:
|
||||||
|
# Ignorar archivos con formato de nombre inesperado
|
||||||
|
continue
|
||||||
|
|
||||||
|
if archivos_para_borrar:
|
||||||
|
print("\nBorrando los siguientes archivos:")
|
||||||
|
for path_a_borrar in sorted(archivos_para_borrar):
|
||||||
|
try:
|
||||||
|
os.remove(path_a_borrar)
|
||||||
|
print(f"Borrado: {path_a_borrar}")
|
||||||
|
archivos_borrados_count += 1
|
||||||
|
except OSError as e:
|
||||||
|
print(f"ERROR: No se pudo borrar el archivo '{path_a_borrar}': {e}")
|
||||||
|
print(f"\nLimpieza completada. Se han borrado {archivos_borrados_count} recibos antiguos.")
|
||||||
|
else:
|
||||||
|
print("\nNo se encontraron recibos para borrar. Todos los recibos son de los últimos 5 meses.")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
limpiar_recibos_por_mes_final()
|
Reference in New Issue
Block a user