从python中ftp服务器的文件列表下载最后创建的o修改文件

从python中ftp服务器的文件列表下载最后创建的o修改文件,python,datetime,ftp,Python,Datetime,Ftp,我有下一个代码,下载zip文件,但我只需要ftp中最后修改或创建的文件,而不是所有文件。 例如,我有: one_20140220.xml.zip one_20140221.xml.zip one_20140222.xml.zip 在这种情况下,我只需要下载一个_20140222.xml.zip文件。 谁能帮帮我吗?。我刚开始使用python。我下一步怎么做 #CODE import ftplib import os import fnmatch import datetime from date

我有下一个代码,下载zip文件,但我只需要ftp中最后修改或创建的文件,而不是所有文件。 例如,我有:

one_20140220.xml.zip one_20140221.xml.zip one_20140222.xml.zip 在这种情况下,我只需要下载一个_20140222.xml.zip文件。 谁能帮帮我吗?。我刚开始使用python。我下一步怎么做

#CODE
import ftplib
import os
import fnmatch
import datetime
from datetime import date, datetime, timedelta


ftp_server='ftp.blabla.com'
ftp_user='user'
ftp_pass='pass'


def download():
    print 'dowloading from ftp server'

os.chdir('/root/dir/zip')
s = ftplib.FTP(ftp_server, ftp_user, ftp_pass)

s.cwd('one/two/')
fileList = s.nlst()
targetList = [fileName for fileName in fileList if fnmatch.fnmatch(fileName,'*.zip')]
if (targetList == []):
    print 'No files to process'
for file in targetList:
    print 'downloaded file: ' + file
    try:
        fileOut=open(file,'wb')
        s.retrbinary('RETR '+file,fileOut.write)
        fileOut.close()
    except:
        print 'Cant open file'

s.quit()
鉴于此

filename1 = 'one_20140220.xml.zip'
filename2 = 'one_20140221.xml.zip'
file1 = filename1.split('.')[0].split('_')
file2 = filename2.split('.')[0].split('_')
print file1[1] < file2[1]
print file1[1], file2[1]

>>> True
>>> 20140220 20140221

假设您的所有文件都像示例中那样命名,这相当简单

import datetime
filenameFmt = "one_%Y%M%d.xml.zip" # You will need to update this to match the filenames
def getEarliestFile(arrayOfFiles):
    namesWithDate = []
    for filename in arrayOfFiles:
        dt = datetime.datetime.strptime(filename,filenameFmt)
        namesWithDate.append((filename,dt))

    #sort the array in ascending order
    namesWithDate = sorted(namesWithDate,key = lambda x: x[1])
    #Grab and return the newest one
    filename, dt = namesWithDate[-1]
    return filename

您可以将所有文件名的完整列表传递给此函数,它将返回最新文件名。

非常感谢,但可能我解释错了。我需要自动获取上次创建的o修改的zip文件,而不是进行比较。我试过了,但对我无效。我感谢你的帮助though@gegQ我的意思是,一旦你通过在日期列表中使用max来获得正确的文件名,你就可以自动打开它。我展示这个比较是为了证明这个比较或者max是有效的。在这种情况下,您将获得文件名作为适当的名称,dofile将打开它并进行处理。非常感谢,我将尝试它
import datetime
filenameFmt = "one_%Y%M%d.xml.zip" # You will need to update this to match the filenames
def getEarliestFile(arrayOfFiles):
    namesWithDate = []
    for filename in arrayOfFiles:
        dt = datetime.datetime.strptime(filename,filenameFmt)
        namesWithDate.append((filename,dt))

    #sort the array in ascending order
    namesWithDate = sorted(namesWithDate,key = lambda x: x[1])
    #Grab and return the newest one
    filename, dt = namesWithDate[-1]
    return filename