在创建zip文件时,添加了根目录中的所有文件夹

时间:2019-08-20 11:35:02

标签: python zip

我正在尝试使用python压缩folder3中存在的所有文件和文件夹。

我为此使用了zipFile。 zip包含从根目录到我要为其创建zip文件夹的目录的所有文件夹。

def CreateZip(dir_name):
    os.chdir(dir_name)
    zf = zipfile.ZipFile("temp.zip", "w")
    for dirname, subdirs, files in os.walk(dir_name):
        zf.write(dirname)
        for filename in files:
            file=os.path.join(dirname, filename)
            zf.write(file)
    zf.printdir()
    zf.close()

预期输出:

  

toBeZippedcontent1 \ toBeZippedFile1.txt
  toBeZippedcontent1 \ toBeZippedFile2.txt
  toBeZippedcontent1 \ toBeZippedFile1.txt
  toBeZippedcontent2 \ toBeZippedFile2.txt

当前输出(zip文件中的文件夹结构):

  

folder1 \ folder2 \ folder3 \ toBeZippedcontent1 \ toBeZippedFile1.txt
  folder1 \ folder2 \ folder3 \ toBeZippedcontent1 \ toBeZippedFile2.txt
  folder1 \ folder2 \ folder3 \ toBeZippedcontent2 \ toBeZippedFile1.txt
  folder1 \ folder2 \ folder3 \ toBeZippedcontent2 \ toBeZippedFile2.txt

1 个答案:

答案 0 :(得分:0)

walk()提供了dirname的绝对路径,因此join()为您的文件创建了绝对路径。

您可能必须从路径中删除folder1\folder2\folder3才能创建相对路径。

file = os.path.relpath(file)

zf.write(file)

您可以尝试将其切成薄片

file = file[len("folder1\folder2\folder3\\"):]

zf.write(file)

但是relpath()应该更好。


您还可以使用第二个参数来更改zip文件中的路径/名称

  z.write(file, 'path/filename.ext')

如果您从其他文件夹运行代码并且未使用os.chdir(),那么您将无法创建相对路径,这将很有用。