如何使用 Python ftplib 获取 FTP 文件修改时间
How to get FTP file's modify time using Python ftplib
我正在尝试使用 Python 将 CSV 文件加载到 Amazon S3。我需要知道 CSV 文件的修改时间。我正在使用 ftplib 将 FTP 与 Python (2.7) 连接起来。
MLST 或 MDTM
虽然您可以通过 FTP 使用 MLST
或 MDTM
命令检索单个文件的时间戳,但 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 库明确支持的唯一可以 return 标准化文件时间戳的命令是 MLSD
通过 FTP.mlsd
method。尽管只有当您想检索更多文件的时间戳时,它的使用才有意义。
- 使用
MLSD
检索完整的目录列表
- 在 returned 集合中搜索您想要的文件
- 检索
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))
请注意 return 由 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.
列表
如果 FTP 服务器不支持 MLST
、MLSD
和 MDTM
中的任何一个,您所能做的就是使用过时的 LIST
命令。这涉及解析专有列表 returns.
常见的 *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。
当我想更改文件修改时间时,我在控制台上使用 FTP 客户端。
登录远程 FTP ftp ftp.dic.com
- cd 命令转到正确的目录
- SITE命令移动扩展命令模式
- UTIME somefile.txt 20050101123000 20050101123000 20050101123000 UTC
更改访问时间,修改时间,是2005-01-01创建目录的时间12:30:00somefile.txt
完整示例:
site UTIME somefile.txt 20150331122000 20150331122000 20150331122000 UTC
请您稍等片刻,祝您旅途愉快:)
我正在尝试使用 Python 将 CSV 文件加载到 Amazon S3。我需要知道 CSV 文件的修改时间。我正在使用 ftplib 将 FTP 与 Python (2.7) 连接起来。
MLST 或 MDTM
虽然您可以通过 FTP 使用 MLST
或 MDTM
命令检索单个文件的时间戳,但 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 库明确支持的唯一可以 return 标准化文件时间戳的命令是 MLSD
通过 FTP.mlsd
method。尽管只有当您想检索更多文件的时间戳时,它的使用才有意义。
- 使用
MLSD
检索完整的目录列表
- 在 returned 集合中搜索您想要的文件
- 检索
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))
请注意 return 由 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.
列表
如果 FTP 服务器不支持 MLST
、MLSD
和 MDTM
中的任何一个,您所能做的就是使用过时的 LIST
命令。这涉及解析专有列表 returns.
常见的 *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。
当我想更改文件修改时间时,我在控制台上使用 FTP 客户端。 登录远程 FTP ftp ftp.dic.com
- cd 命令转到正确的目录
- SITE命令移动扩展命令模式
- UTIME somefile.txt 20050101123000 20050101123000 20050101123000 UTC
更改访问时间,修改时间,是2005-01-01创建目录的时间12:30:00somefile.txt
完整示例:
site UTIME somefile.txt 20150331122000 20150331122000 20150331122000 UTC
请您稍等片刻,祝您旅途愉快:)