使用 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"
Output(Win,但对于 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")
我能够提取内部文件,但它提取了整个链。
假设如下文件结构
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"
Output(Win,但对于 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")