我有一个类似于这个的zip目录:
folder_to_zip
- file_1.csv
- folder_1.zip
1. file_2.csv
2. file_3.csv
3. folder_2.zip
**.**file_4.csv
**.**file_5.csv
**.** file_6.csv
-file_7.csv
我想将每个 csv 文件“放入”不同的 pandas 数据框中
我想这样做的原因是因为我不希望这个项目太“重”(zip_folder 只是 639MB 而不是 7.66 GB)
基于这些问题(Python: Open file in zip without temporary extracting it, Python py7zr can't list files in archive - how to read 7z archive without extracting it)我试过这样的事情:
from py7zr import SevenZipFile as szf
import os
import pandas as pd
def unzip_(folder_to_zip):
dfs= []
if not folder_to_zip.endswith('.csv'):
dfs.append(pd.read_csv(folder_to_zip))
else:
with szf(folder_to_zip, 'r') as z:
for f in z.getnames():
dfs += unzip_(f)
return dfs
如果你真的想这样做,它会是这样的:
import py7zr
import pandas as pd
ar = py7zr.SevenZipFile("archive.7z")
dfs = {}
for name, fd in ar.read(name for name in ar.getnames() if name.endswith(".csv")).items():
dfs[name] = pd.read_csv(fd)
注意这加载到字典而不是列表中(因为我不确定来自的排序定义得有多好)。
但是考虑到 RAM 要求,这在您的用例中似乎用处不大。