Ftplib загрузка файла zip не удалась ([Errno 13] В доступе отказано: 'C: \\ Users \\ kbrab \\ Desktop \\ 2019 \\ test.zip) - PullRequest
0 голосов
/ 13 мая 2019

Я пытался настроить автоматический скрипт Python для загрузки файлов с удаленного FTP-сервера на локальный компьютер.Мне удалось установить соединение, перейти в каталог, однако при попытке загрузить определенный zip-файл я получаю сообщение об ошибке.

[Errno 13] В доступе отказано: 'C: \ Users \ kbrab \ Desktop \ 2019\ test.zip '

Я пытался запустить IDLE от имени администратора, я также проверил, чтобы убедиться, что каталог локального пути создан и правильный.Проверка других подобных сообщений, которые, казалось, были проблемой.FTP-сервер использует неявное шифрование TLS / SSL, файл python запускается на виртуальной машине Windows.

def checkKindred():
    time = a_day_in_previous_month()
    print(time)
    lines = []
    ftp_client.cwd('/kindred/')
    print("Current directory: " + ftp_client.pwd())
    ftp_client.retrlines('NLST',lines.append)
    nameCh = ("Attrition_"+str(time))
    for line in lines:
        if nameCh == line[:17]:
            print("found match")
            print(line)
            fileName = line
            unpackKindred(fileName,time)

def unpackKindred(name,time):
    local_path = "C:\\Users\\kbrab\\Desktop"
    local_path = os.path.join(local_path, str(time)[:4],"Attrition_2019-04-30.zip")
    if not os.path.exists(local_path):
        os.makedirs(local_path)
    try:
        filenames = ftp_client.nlst()
        ftp_client.retrbinary('RETR '+name, open(local_path, 'wb').write)      
    except Exception as e:
        print('Failed to download from ftp: '+ str(e))

Код теперь работает с точки зрения Мартина, добавив исправленный код ниже:

def unpackKindred(name,time):
    local_path = "C:\\Users\\kbrab\\Desktop"
    local_path = os.path.join(local_path, str(time)[:4])
    if not os.path.exists(local_path):
        os.makedirs(local_path)
    filename = os.path.join(local_path, name)
    file = open(filename, "wb")
    ftp_client.retrbinary("retr " + name, file.write)

Ответы [ 2 ]

0 голосов
/ 13 мая 2019

Проверьте права доступа к папке. Установите его так, чтобы у всех был полный контроль.

0 голосов
/ 13 мая 2019

При этом создается папка C:\Users\kbrab\Desktop\2019\test.zip:

if not os.path.exists(local_path):
    os.makedirs(local_path)

И это пытается обработать папку, как если бы это был файл:

ftp_client.retrbinary('RETR '+name, open(local_path, 'wb').write)      
...