Cómo obtener el tiempo de modificación de un archivo FTP utilizando Python ftplib

Estoy intentando cargar un archivo CSV en Amazon S3 con Python. Necesito saber la hora de modificación del archivo CSV. Estoy usando ftplib para conectar FTP con Python (2.7).

MLST o MDTM

Si bien puede recuperar una marca de tiempo de un archivo individual a través de FTP con los comandos MLST o MDTM , MDTM no admite ninguno de ellos.

Por supuesto, puede implementar MLST o MDTM por su cuenta utilizando FTP.voidcmd .

Ver:

  • 3. Tiempo de modificación de archivo (MDTM)
  • 7. Listados para Procesamiento de Máquinas (MLST y MLSD)

Un ejemplo simple 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 la marca de tiempo de archivo estandarizada es MLSD través del método FTP.mlsd . Aunque su uso solo tiene sentido si desea recuperar marcas de tiempo para más archivos.

  • Recupere un listado completo del directorio usando MLSD
  • Busque en la colección devuelta el archivo (s) que desea
  • Recuperar modify hecho
  • Analícelo según la especificación, YYYYMMDDHHMMSS[.sss]

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

  • 7.5.3. La sección Modificar hecho
  • 2.3. Seccion 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.

Una vez más, consulte RFC 3659 2.3. Sección de tiempos :

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


LISTA

Si el servidor FTP no es compatible con MLST , MLSD y MDTM , todo lo que puede hacer es usar un comando LIST obsoleto. Eso implica analizar un listado propietario que devuelve.

Un listado 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 un listado como este, este código hará:

 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)) 

Buscando el último archivo

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

Cuando quiero cambiar la hora de modificación del archivo, uso un cliente FTP en la consola. Inicie sesión en un FTP remoto ftp http://ftp.dic.com

  • Los comandos cd van al directorio correcto
  • Comando SITE para mover el modo de comando extendido
  • UTIME somefile.txt 20050101123000 20050101123000 20050101123000 UTC

cambie la hora de acceso, la hora de modificación, es hora de crear un directorio el 2005-01-01 12:30:00 somefile.txt

Ejemplo completo:

sitio UTIME somefile.txt 20150331122000 20150331122000 20150331122000 UTC

Por favor, siéntase libre de sentarse y desearle un agradable viaje en el tiempo 🙂