Python:读取 7zip 文件而不解压它

问题描述 投票:0回答:1

我有一个类似于这个的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       

python 7zip py7zr
1个回答
0
投票

如果你真的想这样做,它会是这样的:

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 要求,这在您的用例中似乎用处不大。

© www.soinside.com 2019 - 2024. All rights reserved.