如何使用 Python ftplib 获取 FTP 文件修改时间

How to get FTP file's modify time using Python ftplib

我正在尝试使用 Python 将 CSV 文件加载到 Amazon S3。我需要知道 CSV 文件的修改时间。我正在使用 ftplib 将 FTP 与 Python (2.7) 连接起来。

MLST 或 MDTM

虽然您可以通过 FTP 使用 MLSTMDTM 命令检索单个文件的时间戳,但 ftplib 均不支持。

当然,您可以使用 FTP.voidcmd.

自行实现 MLSTMDTM

详情请参考RFC 3659,特别是:

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

ftplib 库明确支持的唯一可以 return 标准化文件时间戳的命令是 MLSD 通过 FTP.mlsd method。尽管只有当您想检索更多文件的时间戳时,它的使用才有意义。

  • 使用 MLSD
  • 检索完整的目录列表
  • 在 returned 集合中搜索您想要的文件
  • 检索 modify 事实
  • 按照规范解析,YYYYMMDDHHMMSS[.sss]

有关详细信息,请再次参考 RFC 3659,特别是:

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

请注意 return 由 MLSTMLSDMDTM 编辑的时间为 UTC(除非服务器已损坏)。因此,您可能需要根据您当地的时区更正它们。

同样,请参阅 RFC 3659 2.3. Times 部分:

Time values are always represented in UTC (GMT), and in the Gregorian calendar regardless of what calendar may have been in use at the date and time indicated at the location of the server-PI.


列表

如果 FTP 服务器不支持 MLSTMLSDMDTM 中的任何一个,您所能做的就是使用过时的 LIST命令。这涉及解析专有列表 returns.

常见的 *nix 清单如下:

-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

对于这样的列表,此代码将执行:

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

正在查找最新文件

另见 Python FTP get the most recent file by date

当我想更改文件修改时间时,我在控制台上使用 FTP 客户端。 登录远程 FTP ftp ftp.dic.com

  • cd 命令转到正确的目录
  • SITE命令移动扩展命令模式
  • UTIME somefile.txt 20050101123000 20050101123000 20050101123000 UTC

更改访问时间,修改时间,是2005-01-01创建目录的时间12:30:00somefile.txt

完整示例:

site UTIME somefile.txt 20150331122000 20150331122000 20150331122000 UTC

请您稍等片刻,祝您旅途愉快:)