如何压缩文件夹的内容而不是文件夹[重复]
Posted
技术标签:
【中文标题】如何压缩文件夹的内容而不是文件夹[重复]【英文标题】:How to zip contents of but not the folder [duplicate] 【发布时间】:2020-07-21 02:06:24 【问题描述】:我正在使用以下文件夹结构:
.
+-- temp
| +-- sample1.csv
| +-- sample2.csv
+-- zips
| +-- zip1.zip
| +-- zip2.zip
+-- main.py
我想将temp
文件夹的内容压缩成一个压缩文件,但我不想包含该文件夹。我尝试了以下方法(希望只压缩文件):
import pathlib
import zipfile
origin = pathlib.Path('.') / 'temp'
destination = pathlib.Path('.') / 'zips' / 'zip3.zip'
with zipfile.ZipFile(destination, mode='w') as zipfile_:
for content in origin.iterdir():
zipfile_.write(content)
我也尝试使用shutil.make_archive()
,但它呈现相同的结果,唯一的区别是该目录被简单地命名为"."
。
编辑:感谢CookieReaver 和metatoaster(我相信)指出ZipFile.write()
方法有一个名为arcname
的参数,它将命名文件(ZipFile.write() documentation)。
这是我应用修复后的原始问题:
import pathlib
import zipfile
origin = pathlib.Path('.') / 'temp'
destination = pathlib.Path('.') / 'zips' / 'zip3.zip'
with zipfile.ZipFile(destination, mode='w') as zipfile_:
for content in origin.iterdir():
zipfile_.write(content, content.name)
【问题讨论】:
【参考方案1】:import zipfile
import os
orig = r"path_to_origin_dir"
dest = r"path_to_destination_dir"
zip_name = "zip3.zip"
target_zip = zipfile.ZipFile(os.path.join(dest, zip_name), 'w')
for dp, dn, fn in os.walk(orig):
for filename in fn:
if filename.endswith('csv'):
target_zip.write(os.path.join(dp, filename), os.path.relpath(os.path.join(dp, filename), orig))
target_zip.close()
这就是你的目标吗?
【讨论】:
以上是关于如何压缩文件夹的内容而不是文件夹[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何获取最新的 JRE / JDK 作为 zip 文件而不是 EXE 或 MSI 安装程序? [关闭]
如何检查zip文件是不是包含所有图像文件而不在服务器上解压缩