Saltar al contenido

Cómo obtener el tiempo de modificación del archivo FTP usando Python ftplib

Este grupo de expertos luego de varios días de investigación y de recopilar de datos, dieron con la solución, nuestro deseo es que resulte de utilidad para tu plan.

Solución:

MLST o MDTM

Si bien puede recuperar una marca de tiempo de un archivo individual a través de FTP con MLST o MDTM comandos, ninguno es compatible con ftplib.

Por supuesto que puedes implementar el MLST o MDTM por su cuenta usando FTP.voidcmd.

Para obtener más información, consulte RFC 3659, en particular:

  • 3. Hora de modificación del archivo (MDTM)
  • 7. Listados para procesamiento de máquinas (MLST y MLSD)

Un ejemplo sencillo para MDTM:

from ftplib import FTP
from dateutil import parser

# ... (connection to FTP)

timestamp = ftp.voidcmd("MDTM /remote/path/file.txt")[4:].strip()

time = parser.parse(timestamp)

print(time)

MLSD

El único comando admitido explícitamente por la biblioteca ftplib que puede devolver una marca de tiempo de archivo estandarizada es MLSD a través de FTP.mlsd método. Aunque su uso solo tiene sentido si desea recuperar marcas de tiempo para más archivos.

  • Recupere una lista de directorio completa usando MLSD
  • Busque en la colección devuelta los archivos que desea
  • Recuperar modify hecho
  • Analizarlo de acuerdo con la especificación, YYYYMMDDHHMMSS[.sss]

Para obtener más información, consulte RFC 3659 nuevamente, en particular:

  • 7.5.3. La sección Modificar hecho
  • 2.3. Sección de tiempos
from ftplib import FTP
from dateutil import parser

# ... (connection to FTP)

files = ftp.mlsd("/remote/path")

for file in files:
    name = file[0]
    timestamp = file[1]['modify']
    time = parser.parse(timestamp)
    print(name + ' - ' + str(time))

Tenga en cuenta que los tiempos devueltos por MLST, MLSD y MDTM están en UTC (a menos que el servidor esté roto). Por lo tanto, es posible que deba corregirlos para su zona horaria local.

Nuevamente, consulte RFC 3659 2.3. Sección de tiempos:

Los valores de hora siempre se representan en UTC (GMT) y en el calendario gregoriano, independientemente de qué calendario haya estado en uso en la fecha y hora indicadas en la ubicación del servidor-PI.


LISTA

Si el servidor FTP no admite ninguno de MLST, MLSD y MDTMtodo lo que puedes hacer es usar un obsoleto LIST dominio. Eso implica analizar una lista propietaria que devuelve.

Una lista común de * nix es como:

-rw-r--r-- 1 user group           4467 Mar 27  2018 file1.zip
-rw-r--r-- 1 user group         124529 Jun 18 15:31 file2.zip

Con una lista como esta, este código servirá:

from ftplib import FTP
from dateutil import parser

# ... (connection to FTP)

lines = []
ftp.dir("/remote/path", lines.append)

for line in lines:
    tokens = line.split(maxsplit = 9)
    name = tokens[8]
    time_str = tokens[5] + " " + tokens[6] + " " + tokens[7]
    time = parser.parse(time_str)
    print(name + ' - ' + str(time))

Encontrar el archivo más reciente

Véase también Python FTP obtener el archivo más reciente por fecha.

Si te ha sido de utilidad este post, agradeceríamos que lo compartas con más entusiastas de la programación de esta manera nos ayudas a dar difusión a nuestro contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *