Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python从目录创建zip_Python_Zip_Zipfile - Fatal编程技术网

使用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:

我正在尝试使用Python从目录创建zip文件。我已经看过了,它是有效的,但我有另一个问题。所以我有这个:

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