从 FTP 服务器上的 ZIP 存档读取文件,无需下载到本地系统

etj*_*tjk 5 python ftp ftplib bytesio pandas

我在 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)
Run Code Online (Sandbox Code Playgroud)

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

Ser*_*sta 6

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  
Run Code Online (Sandbox Code Playgroud)