Нужно узнать тип (расширение) файла с FTP-сервера
Делаю FTP-client на python и PyQt5. Нужно определять что является папкой(каталогом), а что является файлом((На сервере))? FTP.mlsd() не работает(сервер не поддерживает)
Ответы (1 шт):
Автор решения: Alexander Chernin
→ Ссылка
Получение имени файла из url и его расширения:
filename = QUrl("ftp://myserver.com/myfile.txt").fileName()
if filename:
print(f{"url contains a file {filename}"}) # выведет myfile.txt
# Получение расширения файла
print(f'extention={QFileInfo(filename).completeSuffix()}) # выведет txt
else:
print("url is not a file")
Вот такой вариант тоже вернет имя файла:
filename = QUrl("ftp://myserver.com/myfile").fileName()
if filename:
print(f{"url contains a file {filename}"}) # выведет myfile
А вот такой в результате выдаст пустую строку:
filename = QUrl("ftp://myserver.com/myfile/").fileName()
print(filename) # пустая строка
Такие вызовы просто распарсят строку и вернут результат, в частности имя файла.
Для получения ресурсов на ftp-сервере надо воспользоваться классом QFtp как вот в этом примере
Схематично работу с QFtp можно изобразить так:
# Слот. Вызывается для каждого ресурса ftp-сервера
def readFtpResource(urlInfo):
urlInfo.name() # Вернет url-строку, которую можно отправить в QUrl как описано выше
urlInfo.isFile() # Сразу скажет является ли ресурс файлом
urlInfo.isDir() # Является ли ресурс директорией
# и так далее
ftp = QFtp(<адрес ftp-сервера>)
# Соединяем сигнал обработки ресурсов сервера
ftp.listInfo.connect(readFtpResource)
# Подключение к серваку
ftp->connectToHost(hosturl, port);