我能够提取内部文件,但它会提取整个链 假设以下文件结构
v a.zip
v folder1
v folder2
> inner.txt
并假设我想将inner.txt
提取到某个文件夹target
目前,当我尝试这样做时会发生的事情是我最终将folder1/folder2/inner.txt
提取到target
。是否可以提取单个文件而不是整个目录链?因此,当target
被打开时,内部唯一的内容是inner.txt
。
编辑:
使用python zip模块解压缩文件并仅将内部文件提取到所需位置。
答案 0 :(得分:2)
您应该使用 -j (垃圾路径(不要创建目录))修饰符(旧 v5.52 拥有它)。以下是完整列表:[die]: unzip(1) - Linux man page,或者您只需在终端中运行($ {PATH_TO} /)unzip ,它将输出参数列表。
考虑到要在名为 target 的文件夹中提取文件,请使用该命令(您可能需要指定解压缩的路径):
"unzip" -j "a.zip" -d "target" "folder1/folder2/inner.txt"
输出(赢取,但对于 Nix ,这是同样的事情):
(py35x64_test) c:\Work\Dev\StackOverflow\q047439536>"unzip" -j "a.zip" -d "target" "folder1/folder2/inner.txt" Archive: a.zip inflating: target/inner.txt
输出(不含 -j ):
(py35x64_test) c:\Work\Dev\StackOverflow\q047439536>"unzip" "a.zip" -d "target" "folder1/folder2/inner.txt" Archive: a.zip inflating: target/folder1/folder2/inner.txt
或者,因为你提到了 Python ,
code.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")
答案 1 :(得分:1)
zip没有与文件系统相同的文件夹结构 - 每个文件的名称都是整个路径。
您将需要使用允许您读取文件内容的方法(例如zipfile.open或zipfile.read),提取您实际想要使用的文件名的一部分,并将文件内容保存到提交自己。