首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python文件命中用户警告:重复名称

python文件命中用户警告:重复名称
EN

Stack Overflow用户
提问于 2021-05-22 04:07:57
回答 1查看 1.1K关注 0票数 1

我有一个python脚本,它排除了文件夹,并将其余的压缩到zip文件中。但是,我的脚本将所有文件压缩在同一目录级别上。

它给出了以下错误:

代码语言:javascript
复制
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)

要压缩的文件夹结构。

代码语言:javascript
复制
-test
 -file1
   -1.txt
   -2.txt
 -file2
   -1.txt
   -2.txt
 -dump
 -file3

我的python脚本

代码语言:javascript
复制
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 !")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-13 02:54:48

重复名称警告来自相同名称的输入目录文件,所有这些文件都被写入输出zip的同一个位置。下面的内容会被覆盖,您将在zip中留下两个文本文件。

代码语言:javascript
复制
-Output Zip
    -1.txt
    -1.txt
    -2.txt
    -2.txt

弧名参数在下面展开,以保留原始目录的嵌套结构。arg在写入zip时修改文件的名称和位置。“如果继续”用于跳过具有“转储”路径的子文件。

代码语言:javascript
复制
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()
代码语言:javascript
复制
-Output Zip
    -folder1
        -1.txt
        -2.txt
    -folder2
        -1.txt
        -2.txt

或者,从原始目录重命名文件,使它们是唯一的。一种方法是替换弧名路径中的反斜杠。

代码语言:javascript
复制
arcname = outpath[len(path_to_dir):].lstrip(os.sep).replace('\\', '_')
代码语言:javascript
复制
-Output Zip
    -folder1_1.txt
    -folder1_2.txt
    -folder2_1.txt
    -folder2_2.txt

有关更多信息,请参见nested directory appear while creating zip file

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67646030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档