为了账号安全,请及时绑定邮箱和手机立即绑定

Python FTP按日期获取最新文件

Python FTP按日期获取最新文件

慕丝7291255 2019-12-04 15:15:28
我正在使用ftplib连接到ftp站点。我想获取最新上传的文件并下载。我能够连接到ftp服务器并列出文件,我也将它们放在列表中并进行了datefield转换。是否有任何功能/模块可以获取最新日期并从列表中输出整行?#!/usr/bin/env pythonimport ftplibimport osimport socketimport sysHOST = 'test'def main():    try:        f = ftplib.FTP(HOST)    except (socket.error, socket.gaierror), e:        print 'cannot reach to %s' % HOST        return    print "Connect to ftp server"    try:        f.login('anonymous','al@ge.com')    except ftplib.error_perm:        print 'cannot login anonymously'        f.quit()        return    print "logged on to the ftp server"    data = []    f.dir(data.append)    for line in data:        datestr = ' '.join(line.split()[0:2])        orig-date = time.strptime(datestr, '%d-%m-%y %H:%M%p')    f.quit()    returnif __name__ == '__main__':    main()解决:data = []f.dir(data.append)datelist = []filelist = []for line in data:    col = line.split()    datestr = ' '.join(line.split()[0:2])    date = time.strptime(datestr, '%m-%d-%y %H:%M%p')    datelist.append(date)    filelist.append(col[3])combo = zip(datelist,filelist)who = dict(combo)for key in sorted(who.iterkeys(), reverse=True):   print "%s: %s" % (key,who[key])   filename = who[key]   print "file to download is %s" % filename   try:       f.retrbinary('RETR %s' % filename, open(filename, 'wb').write)   except ftplib.err_perm:       print "Error: cannot read file %s" % filename       os.unlink(filename)   else:       print "***Downloaded*** %s " % filename   returnf.quit()return一个问题,是否可以从字典中检索第一个元素?我在这里所做的是for循环仅运行一次并退出,从而为我提供了第一个排序的值,这很好,但是我认为以这种方式进行操作不是一个好习惯。
查看完整描述

3 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

如果您将所有日期都包含在列表中time.struct_time(strptime将会为您提供),那么您只需要做的就是sort列表。


这是一个例子:


#!/usr/bin/python


import time


dates = [

    "Jan 16 18:35 2012",

    "Aug 16 21:14 2012",

    "Dec 05 22:27 2012",

    "Jan 22 19:42 2012",

    "Jan 24 00:49 2012",

    "Dec 15 22:41 2012",

    "Dec 13 01:41 2012",

    "Dec 24 01:23 2012",

    "Jan 21 00:35 2012",

    "Jan 16 18:35 2012",

]


def main():

    datelist = []

    for date in dates:

        date = time.strptime(date, '%b %d %H:%M %Y')

        datelist.append(date)


    print datelist

    datelist.sort()

    print datelist


if __name__ == '__main__':

    main()


查看完整回答
反对 回复 2019-12-04
?
暮色呼如

TA贡献1853条经验 获得超9个赞

我不知道这是您的ftp,但您的示例对我不起作用。我更改了一些与日期排序部分有关的行:


    import sys

    from ftplib import FTP

    import os

    import socket

    import time


    # Connects to the ftp

    ftp = FTP(ftpHost)

    ftp.login(yourUserName,yourPassword)

    data = []

    datelist = []

    filelist = []

    ftp.dir(data.append)

    for line in data:

      col = line.split()

      datestr = ' '.join(line.split()[5:8])

      date = time.strptime(datestr, '%b %d %H:%M')

      datelist.append(date)

      filelist.append(col[8])

    combo = zip(datelist,filelist)

    who = dict(combo)

    for key in sorted(who.iterkeys(), reverse=True):

      print "%s: %s" % (key,who[key])

      filename = who[key]

      print "file to download is %s" % filename

      try:

        ftp.retrbinary('RETR %s' % filename, open(filename, 'wb').write)

      except ftplib.err_perm:

        print "Error: cannot read file %s" % filename

        os.unlink(filename)

      else:

        print "***Downloaded*** %s " % filename

    ftp.quit()


查看完整回答
反对 回复 2019-12-04
  • 3 回答
  • 0 关注
  • 2227 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信