获取压缩文件中文件夹的名称 - Python

8
我一直在整个stackoverflow上搜索,想要找到一个关于如何从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和namelist来希望获取所有子文件夹的名称。
with ZipFile(root.filename, 'r') as f:
    names = f.namelist()

然而,我明白这一点:
['CS10/', 'CS10/.DS_Store', '__MACOSX/', '__MACOSX/CS10/', '__MACOSX/CS10/._.DS_Store', etc........

我想知道是否有一种方法可以获取文件夹名称,例如在这种情况下是CS10等等。
示例:如果我有3个名为“Apple”、“Orange”和“Pear”的文件夹,它们位于一个zip文件路径(Users/Kiona/fruits.zip)中,我想打印出['Apple','Orange','Pear']。

1
只需在它们上面进行迭代,按“/”分割并仅获取第一个字符串(只要存在多个)。要排除“__MACOSX”目录,只需定义一个名称列表以从结果中排除,并检查确保它们不包含在结果中。 - Paul Rooney
我对你的问题有点困惑。一个zip文件可以包含任意数量的目录和文件,并且可能在其中具有任意布局。namelist()只返回它所包含的每个目录和文件在存档中的完整路径。你想要确定哪个文件夹名称,以及基于什么确定呢? - Iguananaut
感谢@Paul Rooney,我希望我的代码可以在所有平台和所有类型的文件夹中使用,虽然我试图只保留以“/”结尾且不包含“__”的文件夹,但我不知道如果我使用另一个平台(例如Windows),它是否会删除我需要的一些文件夹。 - Flora
谢谢@Iguananaut的回复。我更新了我的问题,希望现在更容易理解一些。 - Flora
@Paul Rooney,感谢您的回复。我会更深入地研究它! - Flora
显示剩余4条评论
1个回答

9

1
看起来 is_dir 是在 Python 3.6 中添加的,但实际上它所做的就是检查文件名是否以 '/' 结尾。 - joslarson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接