我使用ftplib连接到ftp站点.我想获取最近上传的文件并下载它.我能够连接到ftp服务器并列出文件,我也将它们放在一个列表中,并将日期字段转换为.是否有任何功能/模块可以获取最近的日期并从列表中输出整行?
#!/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循环只运行一次并退出,从而给我第一个排序的值,这很好,但我不认为这样做是一个好习惯..
解决方法
如果你在列表中有
time.struct_time
(
strptime
将给你这个)的所有日期,那么你所要做的就是对列表进行排序.
这是一个例子:
#!/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()