根据文件名列表(在多个 FTP 目录中)检索 FTP 文件的最简单方法是什么 - Python

What's the easiest way to retrieve FTP files based on a list of filenames (in multiple FTP directories) - Python

在FTP中,结构如下所示:

main_folder / year / month / day / multiple csv files

例如:

main_folder / 2020 / 02 / 03 / '2020-02-03_01.csv', '2020-02-03_02.csv', '2020-02-03_03.csv', .....

main_folder / 2020 / 03 / 03 / '2020-03-03_01.csv', '2020-03-03_02.csv', '2020-03-03_03.csv', .....
main_folder / 2021 / 01 / 01 / '2021-01-01_01.csv', '2021-01-01_02.csv', '2021-01-01_03.csv', .....

所以每年有12个文件夹(每个月一个),每个月有多个文件夹(一天一个),每天有多个csv个文件(文件名由date_xx.csv).

我有一个要下载的文件名列表,例如:

example_list = ['2021-08-09_01.csv', '2021-08-09_02.csv', '2021-08-10_12.csv',
                '2021-08-10_03.csv']

我当前的代码是这样的:从文件名中提取日期 year/month/day -> 然后在 FTP 中构造相应的目录,例如,对于文件 '2021-08-09_01.csv',它将查看目录 main_folder/2021/08/09 下的所有文件,但如果我使用完整目录告诉 FTP 只查看特定文件,它会给我错误 ftplib.error_perm: 550 No such directory.

这是代码:

file_dir = "main_folder/2021/08/09/2021-08-09_01.csv"

ftp_conn = open_ftp_connection(ftp_host, ftp_username, ftp_password, file_dir)
ftp = ftplib.FTP_TLS(host)
ftp.login(username, password)
ftp.cwd(file_dir)

这里我有点迷茫,我怎么告诉FTP在相应的目录中查找那些文件并读取它们的数据(最终目标是发布到s3 bucket)

我会这样做:

import ftplib, os

example_list = ['2021-08-09_01.csv', '2021-08-09_02.csv', '2021-08-10_12.csv', '2021-08-10_03.csv']

FTP_IP = "1.2.3.4"
FTP_LOGIN = "username"
FTP_PASSWD = "password"
CURRENT_DIR = os.getcwd()
MAIN_DIR = "/main_folder"

with ftplib.FTP(FTP_IP, FTP_LOGIN, FTP_PASSWD) as ftp:
    for entry in example_list:
        filesplit = entry.split("-")
        directory = "main_folder/"+filesplit[0]+"/"+filesplit[1]+"/"+filesplit[2].split("_")[0]
        ftp.cwd(directory)
        with open(os.path.join(CURRENT_DIR, entry), 'wb') as f:
            ftp.retrbinary(entry, f.write)
        ftp.cwd(MAIN_DIR)

该文件将被下载到您执行 python 脚本的目录,文件名与服务器上的相同。