提取特定子文件夹 7zip

2 投票
2 回答
7406 浏览
提问于 2025-04-17 10:15

我正在写一个Python脚本,目的是自动更新Calibre,因为它没有自动更新的功能,而且每周都会更新。我的脚本会下载一个便携版的压缩文件,然后需要从这个压缩文件中提取一个特定的子文件夹(我不需要里面的所有文件)。

我现在的代码是:

os.system("7z x install.zip -y -r -oc:\\\"Program Files (x86)\\\"Calibre2");

这段代码对其他所有文件都有效,但就是无法下载我需要的那个特定子目录。有没有什么建议?

2 个回答

0

下面是我之前给的一个关于tar文件的类似回答的压缩版本,链接在这里:答案

使用方法:

unzipdir.py path/to/zipfile zip/folder [output/folder]

脚本:

import sys, os
from zipfile import ZipFile

def get_members(zip, prefix):
    if not prefix.endswith('/'):
        prefix += '/'
    offset = len(prefix)
    for zipinfo in zip.infolist():
        name = zipinfo.filename
        if len(name) > offset:
            zipinfo.filename = name[offset:]
            yield zipinfo

args = sys.argv[1:]

if len(args):
    zip = ZipFile(args[0])
    path = args[2] if len(args) > 2 else '.'
    zip.extractall(path, get_members(zip, args[1]))
3

在这个链接中,提到了一种使用PowerShell从7z文件中部分提取文件夹的方法:

os.system("7z x install.zip subfolder -y -r -oc:\\\"Program Files (x86)\\\"Calibre2")

这样做应该对你有帮助。

撰写回答