Задать вопрос
@Dato38it

Как скачать несколько файлов из FTP-сервера через Python?

Мне нужно скопировать несколько файлов из FTP-сервера в локальную папку.

Как это реализовать на Python?

В дальнейшем я буду копировать файлы в сетевую папку и добавлять скопированные файлы в архив, но пока тренируюсь просто копировать файл в локальную папку без добавления в архив.

Вот как я пытаюсь сделать:
from ftplib import FTP
import os
ftp = FTP("tipftp")
ftp.login(user="tuserftp", passwd="tpssword")
local_file = '/Users/tuser/Documents/py/test/testfile.txt'
#files = ftp.nlst('/Backups/tdir/*.xml')
files = ftp.nlst('/Backups/tdir/MRBTS881364.xml')
#print(files)
for file in files:
    #print(file)
    file_list=[]
    file_list.append(file)
    file_list1=str(file_list)
    print(file_list1)
    with open(local_file, 'wb') as tempfile:
        #print("Работа с файлом testfile")
        ftp.retrbinary('RETR' + file_list1, tempfile.write)
        #ftp.retrbinary('retr ' + str(files), tempfile.write)
ftp.quit()
#source:
# https://sky.pro/media/rabota-s-fajlami-v-python-kak-poluchit-spisok-vseh-fajlov-v-direktorii/
# https://docs.python.org/3/library/ftplib.html
# https://sky.pro/media/kak-ispolzovat-python-dlya-raboty-s-ftp/
# https://pythonworld.ru/tipy-dannyx-v-python/spiski-list-funkcii-i-metody-spiskov.html
# https://dvmn.org/encyclopedia/python_intermediate/python_lists/
# https://metanit.com/python/tutorial/4.1.php
# https://lavrynenko.com/python-ftplib-skachat-fajl/

Здесь сначала пытаюсь скопировать все файлы /Backups/tdir/*.xml, добавляя в список. потом я попробовал хотя бы один файл из данной папки MRBTS881364.xml скачать.
Выходит следующая ошибка:
PS C:\Users\tuser\Documents\py> python .\tpy.py
['/Backups/tdir/MRBTS881364.xml']
Traceback (most recent call last):
  File "C:\Users\tuser\Documents\py\tpy.py", line 13, in <module>
    ftp.retrbinary('RETR %s' %file_list1, tempfile.write)
  File "C:\Program Files\Python310\lib\ftplib.py", line 436, in retrbinary
    with self.transfercmd(cmd, rest) as conn:
  File "C:\Program Files\Python310\lib\ftplib.py", line 393, in transfercmd
    return self.ntransfercmd(cmd, rest)[0]
  File "C:\Program Files\Python310\lib\ftplib.py", line 359, in ntransfercmd
    resp = self.sendcmd(cmd)
  File "C:\Program Files\Python310\lib\ftplib.py", line 281, in sendcmd
    return self.getresp()
  File "C:\Program Files\Python310\lib\ftplib.py", line 254, in getresp
    raise error_perm(resp)
ftplib.error_perm: 550 Failed to open file.


/Backups/tdir/ это папка, из которой мне нужно скачать файлы формата XML.

Как мне это сделать?
  • Вопрос задан
  • 289 просмотров
Подписаться 2 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillbox
    Профессия Python-разработчик + ИИ
    10 месяцев
    Далее
Решения вопроса 1
grantur5707
@grantur5707
Full Stack Web Developer
from ftplib import FTP
import os

ftp = FTP("tipftp")
ftp.login(user="tuserftp", passwd="tpssword")

local_dir = '/Users/tuser/Documents/py/test/'
files = ftp.nlst('/Backups/tdir/')
xml_files = [file for file in files if file.endswith('.xml')]

for file in xml_files:
    local_file = os.path.join(local_dir, os.path.basename(file))
    with open(local_file, 'wb') as tempfile:
        ftp.retrbinary(f'RETR {file}', tempfile.write)

ftp.quit()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы