【发布时间】:2021-10-14 17:30:45
【问题描述】:
在 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)
【问题讨论】:
-
更改目录时,必须对目录本身进行,而不是对目录中的文件进行。尝试
ftp.cwd(main_folder/2021/08/09)然后下载文件。 -
在这之后,如何告诉FTP只下载目标文件而不是下载
main_folder/2021/08/09下的所有文件? -
给我几分钟,我给你举个例子。
-
非常感谢(这几天我一直在为 FTP 苦苦挣扎......)
-
只需将实际文件名提供给
retrbinary调用。见stackoverflow.com/q/11573817/850848#39719174
标签: python python-3.x list ftp ftplib