@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. Как мне это сделать?
  • Вопрос задан
  • 65 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Everything_is_bad
Как всегда, полное непонимание того что ты делаешь, какой же это треш на список делать str, зачем на каждой итерации повторять это, потом эту кривость совать как аргумент для скачивания.

file_list.append(file)
зачем?

file_list1=str(file_list)
вот самый треш

ftp.retrbinary('RETR' + file_list1, tempfile.write)
зачем ты сюда это треш стал совать

#ftp.retrbinary('retr ' + str(files), tempfile.write)
еще раз намекает, что ты программируешь метод тыка, не понимая что ты делаешь.

А теперь главный вопрос, что тебе мешало просто делать ftp.retrbinary('RETR ' + file, tempfile.write)

ЗЫ ну и сразу FTP это уставший протокол, забудь про него, твоя задача элементарно решается через rsync и подобные инструмент, а не этими кривыми костылями
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
20 сент. 2024, в 09:31
7000 руб./за проект
20 сент. 2024, в 08:48
10000 руб./за проект
20 сент. 2024, в 07:46
15000 руб./за проект