【发布时间】:2023-09-15 00:37:01
【问题描述】:
我正在尝试使用 Python 从目录中创建一个 zip 文件。我查看了How to create a zip archive of a directory in Python?,它有效,但我还有另一个问题。所以我有这个:
MyDir
|- DirToZip
| |- SubDir1
| | |- file1.txt
| | |- file2.txt
| |- SubDir2
| | |- file3.txt
| | |- file4.txt
| |- basefile.txt
| |- mimetype
|- create_zip.py
到目前为止,这是我的create_zip.py:
import os, zipfile
name = 'DirToZip'
zip_name = name + '.zip'
with zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED) as zip_ref:
for folder_name, subfolders, filenames in os.walk(name):
for filename in filenames:
file_path = os.path.join(folder_name, filename)
zip_ref.write(file_path)
zip_ref.close()
正如我所说,就代码而言,这可以正常工作,但问题是 zip 文件没有像我想要的那样创建。现在它有根文件夹DirToZip 作为文件根中的唯一文件夹和该文件夹中的其他文件。但我宁愿没有那个根文件夹,只有 zip 文件中的子文件夹。
错误(我不想要的):
DirToZip.zip
|- DirToZip
| |- SubDir1
| | |- file1.txt
| | |- file2.txt
| |- SubDir2
| | |- file3.txt
| | |- file4.txt
| |- basefile.txt
| |- mimetype
正确(我想要的):
DirToZip.zip
|- SubDir1
| |- file1.txt
| |- file2.txt
|- SubDir2
| |- file3.txt
| |- file4.txt
|- basefile.txt
|- mimetype
我尝试在with zipfile... 之后添加for file in os.listdir(name): 并更改为... in os.walk(file),但这不起作用。 zip 文件改为空。
我能做什么?
【问题讨论】:
-
zip_ref.write(filename)- 方法有额外的参数 arcname,你可以随意将其从默认更改为文件名