我尝试使用Python将CSV文件加载到Amazon S3。我需要知道CSV文件的修改时间。我使用ftplib将FTP连接到Python(2.7)。
答案 0 :(得分:14)
虽然您可以使用MLST
或MDTM
命令通过FTP检索单个文件的时间戳,但ftplib都不支持。
当然,您可以使用FTP.voidcmd
自行实施MLST
或MDTM
。
请参阅:
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.mlsd
method。虽然只有在想要检索更多文件的时间戳时才能使用它。
MLSD
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))
请注意,MLST
,MLSD
和MDTM
返回的时间均为UTC(除非服务器已损坏)。因此,您可能需要根据当地时区更正它们。
再次参考RFC 3659 2.3. Times部分:
时间值始终以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))
答案 1 :(得分:-3)
当我想更改文件修改时间时,我在控制台上使用FTP客户端。 登录到远程FTP ftp ftp.dic.com
更改访问时间,修改时间,以及在2005-01-01 12:30:00创建目录的时间 somefile.txt
完整示例:
网站UTIME somefile.txt 20150331122000 20150331122000 20150331122000 UTC
请随时坐下来祝你旅途愉快:)