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

时间:2015-03-13 07:13:47

标签: python python-2.7 datetime ftp ftplib

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

2 个答案:

答案 0 :(得分:14)

MLST或MDTM

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

当然,您可以使用FTP.voidcmd自行实施MLSTMDTM

请参阅:

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库明确支持的唯一可以返回标准化文件时间戳的命令是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))

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

再次参考RFC 3659 2.3. Times部分:

  

时间值始终以UTC(GMT)和格里高利表示   日历,无论日期中可能使用的是哪个日历   和时间表示在服务器-PI的位置。


LIST

如果FTP服务器不支持MLSTMLSDMDTM中的任何一个,您所能做的就是使用过时的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 get the most recent file by date

答案 1 :(得分:-3)

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

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

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

完整示例:

  

网站UTIME somefile.txt 20150331122000 20150331122000 20150331122000 UTC

请随时坐下来祝你旅途愉快:)