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

发布于 2021-01-29 19:35:43

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

关注者
0
被浏览
89
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    MLST或MDTM

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

    当然,您可以使用实现自己的MLST或。MDTMFTP.voidcmd

    有关详细信息,请参阅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库明确支持的唯一可以返回标准化文件时间戳记的命令是MLSD通过FTP.mlsdmethod。尽管仅当您要检索更多文件的时间戳时才使用它。

    • 使用以下命令检索完整的目录列表 MLSD
    • 在返回的集合中搜索所需的文件
    • 检索modify事实
    • 根据规范进行解析, YYYYMMDDHHMMSS[.sss]

    有关详细信息,请再次参考RFC 3659,尤其是:

    • 7.5.3。修改事实部分
    • 2.3。时间

      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))


    请注意MLSTMLSD和返回的时间MDTM均为UTC(除非服务器损坏)。因此,您可能需要针对您当地的时区进行更正。

    同样,请参阅RFC 3659 2.3。时间部分:

    时间值始终以UTC(GMT)和公历表示,无论在服务器PI位置指示的日期和时间使用了哪种日历。


    清单

    如果FTP服务器不支持任何的MLSTMLSD而且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))
    



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看