我正在尝试使用Python将CSV文件加载到Amazon S3。我需要知道CSV文件的修改时间。我正在使用ftplib在Python(2.7)中连接FTP。
我正在尝试使用Python将CSV文件加载到Amazon S3。我需要知道CSV文件的修改时间。我正在使用ftplib在Python(2.7)中连接FTP。
使用MLST
或MDTM
命令可以在FTP上检索单个文件的时间戳,但是ftplib不支持这两个命令。
当然,您可以使用FTP.voidcmd自己实现MLST
或MDTM
。
有关详细信息,请参见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库中唯一明确支持返回标准化文件时间戳的命令,可以通过FTP.mlsd
方法使用。尽管只有在您想要检索多个文件的时间戳时才有意义。
MLSD
检索完整的目录列表modify
factYYYYMMDDHHMMSS[.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))
请注意,MLST
、MLSD
和MDTM
返回的时间是UTC时间(除非服务器出现故障)。因此,您可能需要根据本地时区对其进行更正。
请参考RFC 3659第2.3节:
时间值始终用UTC(GMT)表示,并使用公历表示,而不管在服务器PI位置指示的日期和时间使用了哪个日历。
如果FTP服务器不支持MLST
、MLSD
和MDTM
中的任何一个,那么您只能使用已过时的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))
另请参见Python FTP按日期获取最新文件。
当我想要更改文件修改时间时,我会在控制台上使用FTP客户端。登录到远程FTP ftp ftp.dic.com
更改访问时间、修改时间,这是在2005年1月1日12:30:00创建目录的时间 somefile.txt
完整示例:
site UTIME somefile.txt 20150331122000 20150331122000 20150331122000 UTC
请放心享受愉快的时间旅行之旅 :)