我正在尝试使用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
答案 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()
,那么您将无法创建相对路径,这将很有用。