使用 python 从 zip 文件中提取内部文件

Extracting inner file from zip file with python

我能够提取内部文件,但它提取了整个链。
假设如下文件结构

v a.zip
    v folder1
        v folder2
            > inner.txt

假设我想将 inner.txt 提取到某个文件夹 target
目前,当我尝试这样做时,我最终将 folder1/folder2/inner.txt 提取到 target。是否可以提取单个文件而不是整个目录链?以至于当target打开的时候,里面只有inner.txt.

编辑:
使用 python zip 模块解压缩文件并仅将内部文件提取到所需位置。

zip 没有与文件系统相同的文件夹结构 - 每个文件都有一个名称,即其完整路径。

您需要使用一种允许您读取文件内容的方法(例如 zipfile.open 或 zipfile.read),提取您实际想要使用的文件名部分,然后自己将文件内容保存到该文件。

你应该使用-j垃圾路径(不要创建目录))修饰符(旧的v5 .52 有)。这是完整列表:[DIE.Linux]: unzip(1) - Linux man page,或者您可以简单地 运行 (${PATH_TO}/)unzip 在终端中,它会输出参数列表。

考虑到您要将文件解压缩到名为 target 的文件夹中,请使用命令(您可能需要指定 unzip[=44 的路径=]):

"unzip" -j "a.zip" -d "target" "folder1/folder2/inner.txt"

OutputWin,但对于 Nix 是一样的):

(py35x64_test) c:\Work\Dev\Whosebug\q047439536>"unzip" -j "a.zip" -d "target" "folder1/folder2/inner.txt"
Archive:  a.zip
  inflating: target/inner.txt

输出(没有-j):

(py35x64_test) c:\Work\Dev\Whosebug\q047439536>"unzip" "a.zip" -d "target" "folder1/folder2/inner.txt"
Archive:  a.zip
  inflating: target/folder1/folder2/inner.txt

或者,既然你提到了 Python

code00.py:

import os
from zipfile import ZipFile


def extract_without_folder(arc_name, full_item_name, folder):
    with ZipFile(arc_name) as zf:
        file_data = zf.read(full_item_name)
    with open(os.path.join(folder, os.path.basename(full_item_name)), "wb") as fout:
        fout.write(file_data)


if __name__ == "__main__":
    extract_without_folder("a.zip", "folder1/folder2/inner.txt", "target")