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 MDTM
todo 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.