Получение последних файлов из папки FTP (имя файла с пробелами) в Python

У меня есть требование, когда мне нужно вытащить последние файлы из FTP-папки, проблема в том, что имя файла имеет пробелы и имя файла имеет определенный шаблон. Ниже приведен код, который я реализовал:

import sys from ftplib import FTP import os import socket import time import pandas as pd import numpy as np from glob import glob import datetime as dt from __future__ import with_statement ftp = FTP('') ftp.login('','') ftp.cwd('') ftp.retrlines('LIST') filematch='*Elig.xlsx' downloaded = [] for filename in ftp.nlst(filematch): fhandle=open(filename, 'wb') print 'Getting ' + filename ftp.retrbinary('RETR '+ filename, fhandle.write) fhandle.close() downloaded.append(filename) ftp.quit() 

Я понимаю, что я могу добавить пустой список в команду ftp.dir (), но поскольку имя файла имеет пробелы, я не могу правильно разбить его и выбрать последний файл того типа, который я описал выше.

Любая помощь будет большой.

2 Solutions collect form web for “Получение последних файлов из папки FTP (имя файла с пробелами) в Python”

Вы можете получить файл mtime, отправив команду MDTM, если FTP-сервер поддерживает ее и соответственно сортирует файлы на FTP-сервере.

 def get_newest_files(ftp, limit=None): """Retrieves newest files from the FTP connection. :ftp: The FTP connection to use. :limit: Abort after yielding this amount of files. """ files = [] # Decorate files with mtime. for filename in ftp.nlst(): response = ftp.sendcmd('MDTM {}'.format(filename)) _, mtime = response.split() files.append((mtime, filename)) # Sort files by mtime and break after limit is reached. for index, decorated_filename in enumerate(sorted(files, reverse=True)): if limit is not None and index >= limit: break _, filename = decorated_filename # Undecorate yield filename downloaded = [] # Retrieves the newest file from the FTP server. for filename in get_newest_files(ftp, limit=1): print 'Getting ' + filename with open(filename, 'wb') as file: ftp.retrbinary('RETR '+ filename, file.write) downloaded.append(filename) 

Проблема в том, что команда FTP «LIST» возвращает текст для людей, формат которой зависит от реализации FTP-сервера.

Используя PyFilesystem (вместо стандартного ftplib) и его API, вы получите API-интерфейс «списка» (search «walk»), который предоставит Pythonic-структуры списков файлов и каталогов, размещенных на FTP-сервере.

http://pyfilesystem2.readthedocs.io/en/latest/index.html

  • правильное использование scipy.optimize.fmin_bfgs
  • Модуль протоколирования Python испускает неверную информацию о часовом поясе
  • Python бросает TypeError на issubclass (), когда issubclass () никогда не вызывается
  • Apache + mod_wsgi - Python не загружает установленные модули
  • Что делают флаги low_memory и memory_map в pd.read_csv
  • когда использовать отрицательное число, чтобы нарезать строку в Python, 0 отключен?
  • Настройка Python с WSGI на Apache для каталога
  • Как заставить matplotlib открывать окно для комментариев пользователей?
  • Python - лучший язык программирования в мире.