获取 zip 文件中的文件夹名称 - Python

Posted

技术标签:

【中文标题】获取 zip 文件中的文件夹名称 - Python【英文标题】:Get name of folders in zip files - Python 【发布时间】:2017-10-25 23:29:27 【问题描述】:

我一直在搜索整个 ***,以了解如何从 zip 文件路径中仅提取子文件夹的名称。

我尝试使用 tkinter 获取 zip 路径:

Import os
from tkinter import filedialog
import tkinter as tk
from zipfile import ZipFile

root = tk.Tk()
root.withdraw()
root.filename = filedialog.askopenfilename(initialdir=os.getcwd(), title="Select file", filetypes=[("zip", "*.zip")])

并使用 ZipFile 和名称列表希望获得所有子文件夹的名称。

with ZipFile(root.filename, 'r') as f:
    names = f.namelist()

但是,我明白了:

['CS10/', 'CS10/.DS_Store', '__MACOSX/', '__MACOSX/CS10/', '__MACOSX/CS10/._.DS_Store', etc........

我想知道是否有办法只获取文件夹名称,在这种情况下是 CS10 等等。

示例: 如果我在 zip 文件路径中有 3 个名为:“Apple”“Orange”“Pear”的文件夹(Users/Kiona/fruits.zip) 我要打印 ['Apple','Orange','Pear']

我对 Python 很陌生,所以我希望这听起来不是一个非常愚蠢的问题。

干杯!

【问题讨论】:

只需在/ 上对它们进行迭代并仅获取第一个字符串(只要有多个字符串)。要排除“__MACOSX”目录,只需定义您将从结果中排除的名称列表,并检查以确保它们不包含在结果中。 你的问题让我有点困惑。一个 zip 文件可以包含任意数量的目录和文件,并且可以在其中具有任意布局。 namelist() 只返回它包含的每个目录和文件的存档中的完整路径。您试图确定什么文件夹名称以及基于什么? 谢谢@Paul Rooney,我想要它,以便所有平台和所有类型的文件夹都可以用于我的代码,但我试图只保留以“/”结尾的文件夹而不是t 包含“__”,但我不知道我是否使用其他平台(例如 Windows)它会丢弃一些我需要的内容。 是的,如果由于某种原因您希望存档中的 OSX 隐藏文件杂乱无章,您将不得不明确地忽略它。 是的,您还可以根据 __ 前缀或隐藏状态排除文件。提供一个防弹解决方案来检测您不想要的文件是很棘手的,您必须尝试找到满足您需求的解决方案。 【参考方案1】:

我尚未对此进行测试,但您可能正在寻找以下内容:

with ZipFile(root.filename, 'r') as f:
    names = [info.filename for info in f.infolist() if info.is_dir()]

作为参考,请查看https://docs.python.org/3.6/library/zipfile.html#zipfile.ZipFile.infolist 和https://docs.python.org/3.6/library/zipfile.html#zipfile.ZipInfo.is_dir

【讨论】:

看起来is_dir 是在 Python 3.6 中添加的,但实际上它所做的只是检查文件名是否以“/”结尾

以上是关于获取 zip 文件中的文件夹名称 - Python的主要内容,如果未能解决你的问题,请参考以下文章

iPhone - 获取与 zip 名称相同的 zip 文件名和文件夹

从 Python3 中的 .zip 文件中提取和读取 [重复]

使用 python zipfile 提取 zip 子文件夹中的文件

C#中如何获取程序的当前文件夹名称并将zip文件解压到当前文件夹? [复制]

python zip压缩文件并设置密码

用python解压图片并打印代码