繁体   English   中英

如何从 zip 文件的多个文件夹访问多个 CSV 文件

[英]How to access multiple CSV files that share the same name from multiple folders from a zip file

我有一个 zip 文件(本地存储),其中包含多个文件夹。 每个文件夹中都有几个 CSV 文件。 我只需要从每个文件夹中访问 1 个特定的 CSV。 我试图从每个文件夹访问的 CSV 都共享相同的名称,但我无法弄清楚如何从每个文件夹访问特定文件,然后将它们连接到 pandas df 中。

我尝试了以下方法(最初尝试读取所有 CSV):

path = r"C:\Users\...\Downloads\folder.zip"
all_files = glob.glob(os.path.join(path , "/*.csv"))

li = []

for filename in all_files:
    df = pd.read_csv(filename, index_col=None)
    li.append(df)

frame = pd.concat(li, axis=0, ignore_index=True)

但我得到: ValueError:没有要连接的对象。 CSV 肯定存在且不为空。

我目前正在尝试在 sagemaker 笔记本中执行此操作,不确定这是否也会导致我出现问题。 任何帮助都会很棒。

在 Umar.H 和 mad 的一些挖掘和建议之后,我找到了解决我最初的问题和我最初使用的代码示例的解决方案。

我最初使用的代码无法直接访问 zip 文件,因此我解压缩了该文件并仅在一个常规文件夹上进行了尝试。 通过将 all_files 中的"/*file.csv"更改为"*/*file.csv来解决将 df 的li的空列表修改为不返回空列表的问题。

为了解决我遇到的主要问题,即避免解压缩 zip 文件并访问所有必需的 CSV,我设法让以下工作

PATH = "C:/Users/.../Downloads/folder.zip"

li = []
with zipfile.ZipFile(PATH, "r") as f:
    for name in f.namelist():
        if name.endswith("file.csv"):
            data = f.open(name)
            df = pd.read_csv(data, header=None, low_memory = False)
            li.append(df)

frame = pd.concat(li, axis=0, ignore_index=True)

希望这对其他拥有大型 zip 文件的人有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM