从 FTP 服务器上的 ZIP 存档中读取文件而不下载到本地系统

Reading file from a ZIP archive on FTP server without downloading to local system

我在 FTP 服务器上的目标文件是一个 ZIP 文件,.CSV 文件位于更远的两个文件夹中。

如何使用 BytesIO 允许 pandas 读取 csv 而无需下载?

这是我目前拥有的:

ftp = FTP('FTP_SERVER')
ftp.login('USERNAME', 'PASSWORD')
flo = BytesIO()
ftp.retrbinary('RETR /ParentZipFolder.zip', flo.write)
flo.seek(0)

flo 作为我感兴趣的 BytesIO 对象,我如何才能在对象中向下导航几个文件夹,以允许 pandas 读取我的 .csv 文件?这还有必要吗?

zipfile 模块接受存档和单个文件的类文件对象,因此您可以提取 csv 文件而无需将存档写入磁盘。由于 read_csv 也接受类似文件的对象,因此一切都应该可以正常工作(前提是您有足够的可用内存):

...
flo = BytesIO()
ftp.retrbinary('RETR /ParentZipFolder.zip', flo.write)
flo.seek(0)
with ZipFile(flo) as archive:
    with archive.open('foo/fee/bar.csv') as fd:
        df = pd.read_csv(fd)  # add relevant options here include encoding it is matters