我有一个python脚本,它排除了文件夹,并将其余的压缩到zip文件中。但是,我的脚本将所有文件压缩在同一目录级别上。
它给出了以下错误:
C:\Program Files\Python39\lib\zipfile.py:1505: UserWarning: Duplicate name: '1.txt'
return self._open_to_write(zinfo, force_zip64=force_zip64)
C:\Program Files\Python39\lib\zipfile.py:1505: UserWarning: Duplicate name: '2.txt'
return self._open_to_write(zinfo, force_zip64=force_zip64)要压缩的文件夹结构。
-test
-file1
-1.txt
-2.txt
-file2
-1.txt
-2.txt
-dump
-file3我的python脚本
import os
from zipfile import ZipFile
from datetime import date
from os.path import basename
# format the dd/mm/y
today = date.today()
todayDate = today.strftime("%d-%m-%y")
# path to zip
pathZip = "C:\\PY\\Project\\Self\\python-zip\\test"
# get the final forler name
forlderToZip = basename(pathZip)
# format the zip file name
zipFileName = todayDate + " " + forlderToZip + ".zip"
# create a ZipFile object
zipObj = ZipFile(zipFileName, "w")
# exclude the folder to be zip
exclude_folder = "dump"
print("Zip start...")
for dirname, subdirs, files in os.walk(pathZip):
if exclude_folder in subdirs:
subdirs.remove(exclude_folder)
# Add empty folder to zip
zipObj.write(dirname)
for filename in files:
# create complete filepath of file in directory
filePath = os.path.join(dirname, filename)
# Add file to zip
zipObj.write(filePath,basename(filePath))
print("Zip " + filePath)
# close the Zip File
zipObj.close()
print("Zip done !")发布于 2022-07-13 02:54:48
重复名称警告来自相同名称的输入目录文件,所有这些文件都被写入输出zip的同一个位置。下面的内容会被覆盖,您将在zip中留下两个文本文件。
-Output Zip
-1.txt
-1.txt
-2.txt
-2.txt弧名参数在下面展开,以保留原始目录的嵌套结构。arg在写入zip时修改文件的名称和位置。“如果继续”用于跳过具有“转储”路径的子文件。
import os
from zipfile import ZipFile
path_to_dir = ''
path_to_zip = ''
output_zip = ZipFile(path_to_zip, "w")
for dirpath, dirnames, filenames in os.walk(path_to_dir):
if 'dump' in dirpath:
continue
for f in filenames:
outpath = os.path.join(dirpath, f)
arcname = outpath[len(path_to_dir):].lstrip(os.sep)
output_zip.write(outpath, arcname)
output_zip.close()-Output Zip
-folder1
-1.txt
-2.txt
-folder2
-1.txt
-2.txt或者,从原始目录重命名文件,使它们是唯一的。一种方法是替换弧名路径中的反斜杠。
arcname = outpath[len(path_to_dir):].lstrip(os.sep).replace('\\', '_')-Output Zip
-folder1_1.txt
-folder1_2.txt
-folder2_1.txt
-folder2_2.txthttps://stackoverflow.com/questions/67646030
复制相似问题