编程语言
首页 > 编程语言> > 如何使用Python ftplib获取FTP文件的修改时间

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

作者:互联网

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

解决方法:

MLST或MDTM

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

当然,您可以使用FTP.voidcmd自行实现MLST或MDTM.

看到:

> 3. File Modification Time (MDTM)
> 7. Listings for Machine Processing (MLST and MLSD)

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检索完整的目录列表
>在返回的集合中搜索所需的文件
>检索修改事实
>根据规范解析它,YYYYMMDDHHMMSS [.sss]

有关详细信息,请参阅RFC 3659,特别是:

> 7.5.3. The modify Fact部分
> 2.3. Times部分

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部分:

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.

LIST

如果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 get the most recent file by date.

标签:python,datetime,python-2-7,ftp,ftplib
来源: https://codeday.me/bug/20190923/1814067.html