Вот мой код:
Код: Выделить всё
def download_directory(self, ftp, remote_directory, local_directory):
"""Download all files in the specified folder to the local path"""
try:
local_file_path = None
ftp.cwd(remote_directory)
file_list = []
ftp.retrlines('LIST', file_list.append)
os.makedirs(local_directory, exist_ok=True)
# Walk through the file list and download the file
for file_info in file_list:
parts = file_info.split()
name = parts[-1]
try:
if file_info.lower().startswith('d'):
# directory
self.download_directory(ftp, f"{remote_directory}/{name}", f"{local_directory}/{name}")
else:
# file
local_file_path = os.path.join(local_directory, name)
with open(local_file_path, 'wb') as local_file:
ftp.retrbinary(f'RETR {name}', local_file.write)
print(f'success:{local_file_path}')
except Exception as e:
print(f'fail:{local_file_path},error_message:{e}')
except Exception as e:
print(f'fail,error_message:{e}')
Я нашел файл /config/version.ini на своем ftp. После загрузки этого файла я не отключил каталог файлов ftp, в результате чего не удалось загрузить все файлы после /config. Я решил проблему, добавив ftp.cwd(remote_directory) в цикл for!
Подробнее здесь: https://stackoverflow.com/questions/784 ... -open-file