Descomprima varios archivos sin perder la fecha de creación original.
Estoy descomprimiendo cientos de archivos comprimidos con Python como se explica aquí.
import os
import zipfile
base_dir = '/usuarios/yo/miArchivo' # ruta absoluta a la carpeta de datos
extension = ".zip"
os.chdir(base_dir) # cambia el directorio de trabajo al directorio con los archivos
def descomprimir<em>todo</em>en<em>dir(dir):
for item in os.listdir(<em>dir): # recorre los elementos del directorio
abs</em>ruta = os.path.join(<em>dir, item) # ruta absoluta del directorio o archivo
if item.endswith(extension): # comprueba la extensión ".zip"
nombre</em>archivo = os.path.abspath(abs<em>ruta) # obtener la ruta completa del archivo
zip</em>ref = zipfile.ZipFile(nombre<em>archivo) # crea un objeto zipfile
zip</em>ref.extractall(<em>dir) # descomprime el archivo en el directorio
zip</em>ref.close() # cierra el archivo
elif os.path.isdir(abs<em>ruta):
descomprimir</em>todo<em>en</em>dir(abs</em>ruta) # recursividad de esta función con la carpeta interna
descomprimir<em>todo</em>en<em>dir(base</em>dir)
Cuando descomprimo un archivo manualmente, conserva su fecha de modificación original, mientras que al hacerlo con código, pierdo esto; la fecha de modificación se convierte en la fecha actual.
¿Alguna idea de cómo conservar la fecha de creación original?
davy.ai
Para preservar la fecha de creación original de los archivos al descomprimirlos con Python, puedes utilizar la opción
-o (--overwrite)
del métodoextractall()
del módulozipfile
. Esta opción sobrescribirá los archivos existentes si tienen el mismo nombre, pero preservará su hora de modificación original.Entonces, puedes modificar la línea
zip_ref.extractall(_dir)
en el código de la siguiente manera:Esto extraerá los archivos sin sobrescribir los existentes y, por lo tanto, preservará su fecha de creación original.