我正在尝试使用Python将CSV文件加载到Amazon S3。我需要知道CSV文件的修改时间。我正在使用ftplib将FTP与Python(2.7)连接。
虽然可以使用MLST或MDTM命令通过FTP检索单个文件的时间戳,但ftplib都不支持。
MLST
MDTM
当然,您可以使用实现自己的MLST或。MDTMFTP.voidcmd
FTP.voidcmd
有关详细信息,请参阅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)
ftplib库明确支持的唯一可以返回标准化文件时间戳记的命令是MLSD通过FTP.mlsdmethod。尽管仅当您要检索更多文件的时间戳时才使用它。
MLSD
FTP.mlsd
modify
YYYYMMDDHHMMSS[.sss]
有关详细信息,请再次参考RFC 3659,尤其是:
2.3。时间段
from ftplib import FTP from dateutil import parser
files = ftp.mlsd(“/remote/path”)
for file in files: name = file[0] timestamp = file[1][‘modify’] time = parser.parse(timestamp) print(name + ‘ - ‘ + str(time))
请注意MLST,MLSD和返回的时间MDTM均为UTC(除非服务器损坏)。因此,您可能需要针对您当地的时区进行更正。
同样,请参阅RFC 3659 2.3。时间部分:
时间值始终以UTC(GMT)和公历表示,无论在服务器PI位置指示的日期和时间使用了哪种日历。
如果FTP服务器不支持任何的MLST,MLSD而且MDTM,你所能做的就是用一个过时的LIST命令。这涉及解析返回的专有列表。
LIST
常见的* 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))