Cómo obtener el tiempo de modificación del archivo FTP usando Python ftplib
python-2.7 datetime (2)
MLST o MDTM
Si bien puede recuperar una marca de tiempo de un archivo individual a través de FTP con comandos
MLST
o
MDTM
, ninguno de los dos es compatible con ftplib.
Por supuesto, puede implementar
MLST
o
MDTM
por su cuenta utilizando
FTP.voidcmd
.
Ver:
- 3. Tiempo de modificación del archivo (MDTM)
- 7. Listados para el procesamiento de la máquina (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 del archivo estandarizado es
MLSD
través del
método
FTP.mlsd
.
Aunque su uso tiene sentido solo si desea recuperar marcas de tiempo para más archivos.
-
Recupere una lista completa del directorio usando
MLSD
- Busque en la colección devuelta los archivos que desea
-
Recuperar
modify
hecho -
Analízalo según la especificación,
YYYYMMDDHHMMSS[.sss]
Para más detalles, consulte RFC 3659 , 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 tiempo 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 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.
Una lista común * 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))
Encontrar el último archivo
Consulte también Python FTP para obtener el archivo más reciente por fecha .
Estoy tratando de 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).
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 ftp.dic.com
- los comandos de cd van al directorio correcto
- Comando SITE para mover el modo de comando extendido
- UTIME somefile.txt 20050101123000 20050101123000 20050101123000 UTC
cambiar el tiempo de acceso, el tiempo 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
Siéntase libre de sentarse y desearle un agradable viaje en el tiempo :)