【问题标题】:Extract a list of files with a certain criteria within subdirectory of zip archive in python在 python 中的 zip 存档子目录中提取具有特定条件的文件列表
【发布时间】:2023-02-09 22:09:41
【问题描述】:

我想访问 zip 文件中的一些 .jp2 图像文件并创建它们的路径列表。该 zip 文件包含一个名为 S2A_MSIL2A_20170420T103021_N0204_R108_T32UNB_20170420T103454.SAFE 的目录文件夹,在解压缩该文件夹后,我目前正在使用 glob 读取这些文件。

我不想先解压缩 zip 文件的内容。我读到我不能在 zip 目录中使用 glob,也不能使用通配符访问其中的文件,所以我想知道除了解压缩到临时目录之外我的选择是什么。

我目前获取列表的方式是这样的:

dirr = r'C:\path-to-folder\S2A_MSIL2A_20170420T103021_N0204_R108_T32UNB_20170420T103454.SAFE'

jp2_files = glob.glob(dirr + '/**/IMG_DATA/**/R60m/*B??_??m.jp2', recursive=True)

目录中还有其他不同的 .jp2 文件,因此我使用 glob 通配符来过滤我需要的文件。

我希望能够完成这项工作,以便我可以针对许多不同的 zip 目录对其进行自动化。非常感谢任何帮助。

【问题讨论】:

  • 您应该能够使用zipfilere 模块在几行代码中实现您想要的。使用ZipFile.namelist()
  • 谢谢你的评论。我只是设法用 zipfile 和 fnmatch 做到了。
  • 凉爽的。那就提交答案吧。未来的其他人可能会遇到同样的问题。

标签: python path zip extract glob


【解决方案1】:

我让它与zipfilefnmatch 一起工作

from zipfile import ZipFile
import fnmatch
zip = path_to_zip.zip

with ZipFile(zipaki, 'r') as zipObj:
    file_list = zipObj.namelist()
    pattern = '*/R60m/*B???60m.jp2'

    filtered_list = []
    for file in file_list:
        if fnmatch.fnmatch(file, pattern):
            filtered_list.append(file)

【讨论】:

    猜你喜欢
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 2014-04-03
    相关资源
    最近更新 更多