Проход по файлам в ftp с использованием ftplib возвращает «Нет такого файла или каталога» во втором цикле - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь перебрать файлы на ftp и затем сохранить их.Однако на второй итерации я получаю сообщение об ошибке:

FileNotFoundError: [Errno 2] No such file or directory:

Вот мой код:

# TODO: auth
from ftplib import FTP

def extract(environment):

    ftp = FTP(auth["host"])

    # Monitor and extract
    with ftp.login(user=auth['username'], passwd=auth['password']) as ftp:

        folders = []
        try:
            folders = ftp.nlst()
        except:
            print('Probably no folders in this directory')

        for f in folders:

            # Go into subfolder per subfund
            path = "".join(['/',f])
            ftp.cwd(path)

            # List files
            files = []
            try:
                files = ftp.nlst()
            except:
                print('Probably no files in this directory')

            for filename in files:
                if ".csv" in filename:

                    with open(filename, 'r+') as source_file:

                        print('opened, this works for the 1st only')
                        store_to_gcs(source_file, filename)


def store_to_gcs(source_file, filename)
    # TODO: bucket = storage.bucket(app=app)
    # After it I store it to GCS, does it have anything to do with it?

    storage_ref = "test/" + filename
    blob = bucket.blob(storage_ref)
    blob.upload_from_file(source_file)

with open(filename, 'r+') as source_file работает только для первого файла в файлах, но недля второго.

Я могу подтвердить, что нахожусь в правильном каталоге, как я сделал ftp.pwd() для подтверждения.

1 Ответ

0 голосов
/ 19 февраля 2019

open(filename, 'r+') открывает локальный файл.Хотя я считаю, что вы хотите открыть удаленный файл.

Возможно, у вас есть локальная копия ffpos1_708524_57474156_18022019_036521_1.csv, но не fflia1_708470_57474842_18022019_036521_1.csv.Это объясняет, почему open, по-видимому, успешно справляется с первой итерацией.


В ftplib нет open -подобной функции.


Существует два решения:

...