使用Python从目录创建zip
我正在尝试使用Python从目录创建zip文件。我已经看过了,它是有效的,但我有另一个问题。所以我有这个:使用Python从目录创建zip,python,zip,zipfile,Python,Zip,Zipfile,我正在尝试使用Python从目录创建zip文件。我已经看过了,它是有效的,但我有另一个问题。所以我有这个: MyDir |- DirToZip | |- SubDir1 | | |- file1.txt | | |- file2.txt | |- SubDir2 | | |- file3.txt | | |- file4.txt | |- basefile.txt | |- mimetype |- create_zip.py 这是我迄今为止的create_zip.py:
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
正确(我想要的):
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
我尝试为os.listdir(名称)中的文件添加,
在之后使用zipfile…
并更改为。。。在os.walk(文件)
中,但这不起作用。zip文件变为空
我能做什么?很简单:
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, arcname=os.path.relpath(file_path, name))
zip_ref.close()
zip\u ref.write(filename)
-方法有额外的参数arcname,您可以根据需要将其从默认值更改为filename