python解压zip文件,不保留zip文件目录结构的方法
python可以使用内置zipfile模块的extract或extractall方法解压zip文件,但是解压的文件会保留其在zip中的目录结果,有时不需要保留目录结构,想把文件提取到指定目录下平铺展开,可以使用以下方法
使用open方法打开zip中的文件,再把文件复制到指定文件中
import os
import shutil
import zipfile
my_dir = r"D:\Download"
my_zip = r"D:\Download\my_file.zip"
with zipfile.ZipFile(my_zip) as zip_file:
for member in zip_file.namelist():
filename = os.path.basename(member)
# skip directories
if not filename:
continue
# copy file (taken from zipfile's extract)
source = zip_file.open(member)
target = open(os.path.join(my_dir, filename), "wb")
with source, target:
shutil.copyfileobj(source, target)
遍历ZipFile.infolist(), 修改ZipInfo对象的filename属性,使用extract方法提前到指定目录
import glob
import zipfile
import shutil
import os
my_dir = "D:\\Download\\"
my_zip = "D:\\Download\\my_file.zip"
with zipfile.ZipFile(my_zip) as zip:
for zip_info in zip.infolist():
if zip_info.filename[-1] == '/':
continue
zip_info.filename = os.path.basename(zip_info.filename)
zip.extract(zip_info, my_dir)
方法三
read方法读取zip指定文件,再写入到目标问题,python3.6以上可以使用pathlib.Path
from pathlib import Path
import zipfile
import os
my_dir = Path("D:\\Download\\")
my_zip = my_dir / "my_file.zip"
zip_file = zipfile.ZipFile(my_zip, 'r')
for files in zip_file.namelist():
data = zip_file.read(files, my_dir)
myfile_path = my_dir / Path(files.filename).name
myfile_path.write_bytes(data)
zip_file.close()