Python FTP按日期获取最新文件

我正在使用ftplib连接到ftp站点。我想获取最新上传的文件并下载。我能够连接到ftp服务器并列出文件,我也将它们放在列表中并进行了datefield转换。是否有任何功能/模块可以获取最新日期并从列表中输出整行?


#!/usr/bin/env python


import ftplib

import os

import socket

import sys



HOST = '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()

    return



if __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

   return


f.quit()

return

一个问题,是否可以从字典中检索第一个元素?我在这里所做的是for循环仅运行一次并退出,从而为我提供了第一个排序的值,这很好,但是我认为以这种方式进行操作不是一个好习惯。


慕丝7291255
浏览 2228回答 3
3回答

宝慕林4294392

如果您将所有日期都包含在列表中time.struct_time(strptime将会为您提供),那么您只需要做的就是sort列表。这是一个例子:#!/usr/bin/pythonimport timedates = [    "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 datelistif __name__ == '__main__':    main()

暮色呼如

我不知道这是您的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()
打开App,查看更多内容
随时随地看视频慕课网APP