从 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
我在 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