使用ftplib循环遍历ftp中的文件会在第二个循环中返回“No such file or directory”

问题描述 投票:1回答:1

我试图循环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()确认。

python ftp ftplib
1个回答
1
投票

open(filename, 'r+')打开一个本地文件。虽然我相信你想打开一个远程文件。

你可能有ffpos1_708524_57474156_18022019_036521_1.csv的本地副本,但不是fflia1_708470_57474842_18022019_036521_1.csv。这就解释了为什么open在第一次迭代中看似成功。


ftplib中没有类似open的功能。


有两种解决方案:

© www.soinside.com 2019 - 2024. All rights reserved.