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循环仅运行一次并退出,从而为我提供了一个很好的第一个排序值,但是我认为以这种方式进行操作不是一个好习惯。

回答:

使用NLST,就像Martin Prikryl的回答一样:您应该使用sorted方法:

ftp = FTP(host="127.0.0.1", user="u",passwd="p")

ftp.cwd("/data")

file_name = sorted(ftp.nlst(), key=lambda x: ftp.voidcmd(f"MDTM {x}"))[-1]

以上是 Python FTP按日期获取最新文件 的全部内容, 来源链接: utcz.com/qa/427845.html

回到顶部