В приведенном ниже скрипте будут загружены только имена файлов с ftp-сайта, а не фактический файл, который я хочу загрузить, поэтому после скачивания размер файла остается 0. У вас есть идея, что вызывает проблему? Любая помощь будет оценена.Python - Скачайте все файлы из каталога ftp
import os
from ftplib import FTP
import time
# Connects to remote ftp server
def connect_ftp(hostname, username, password, source_directory, destination_directory):
os.chdir(destination_directory)
print("Connecting to " + hostname + "...")
ftp = FTP(hostname)
ftp.login(username, password)
print(ftp.getwelcome())
print("Connected Successfully!\n")
ftp.cwd(source_directory)
download_files(ftp)
# Download files
def download_files(ftp):
print("This script will only download files, not directories.")
print("Files at " + source_directory + ":\n")
ftp.retrlines("LIST")
file_list = []
ftp.retrlines("NLST", file_list.append)
print("")
i = 0
for filename in file_list:
if (filename != '.') and (filename != '..'):
print("Downloading " + filename + "...")
try:
ftp.retrbinary("RETR " + filename, open(filename, "wb").write)
i=i+1
except Exception as directory_error:
print ("Oops! Was " + filename + " a directory? I won't download directories.")
print(str(i) + " files successfully downloaded.\n")
disconnect_ftp(ftp)
# Disconnects from ftp server
def disconnect_ftp(ftp):
print("Disconnecting from " + hostname + "...")
ftp.quit()
print("Disconnected from " + hostname + ".")
time.sleep(4)
hostname = "ftpsite" # TODO: Replace with the hostname of the server you want to connect to
username = "" # TODO: Replace the username
password = "" # TODO: Replace the password
source_directory = "/source/directory/" # TODO: Change location to wherever you want to start the download
destination_directory = "C:\example\FTP" # TODO: Change the location of where you want to download the files to
connect_ftp(hostname, username, password, source_directory, destination_directory)
Загрузка всех файлов в директории, по существу, такой же, как загрузить каталог, все, что вам нужно сделать, это сначала создать каталог назначения с таким же именем, как и на источник, из которого происходят файлы. – martineau
Спасибо за предложение @martineau. – user
Загружает файл, но размер файла 0 kb. «0 файлов успешно загружено». – user