首页 > 解决方案 > Python解压缩并将“_”添加到新提取的文件中

问题描述

使用此代码,我从 zip 文件中提取文件,但如果存在与我在不同 zip 文件中提取的文件同名的文件,则会覆盖此文件。我希望通过在末尾添加“_1”来提取此文件。你能帮我解决这个问题吗?

import zipfile, os, shutil
myZip = zipfile.ZipFile('abc.zip')    

directory_to_extract_to = "place of extraction path"

for file in myZip.filelist:
    if file.filename.endswith('.txt'):
        source = myZip.open(file)
        target = open(os.path.join(directory_to_extract_to, os.path.basename(file.filename)), "wb")

        with source, target:
            shutil.copyfileobj(source, target)

例如; OK.txt >>> 提取新的同名文件 >>> OK_1.txt >>> OK_2.txt

标签: pythonzipunzip

解决方案


我相信这会回答你的问题:

import zipfile, os, shutil

myZip = zipfile.ZipFile('abc.zip') 

directory_to_extract_to = "place of extraction path"

for i,file in enumerate(myZip.filelist):
    if file.filename.endswith('.txt'):
        if file.filename not in os.listdir(directory_to_extract_to):
            path=os.path.join(directory_to_extract_to, os.path.basename(file.filename))
        else:
            path=os.path.join(directory_to_extract_to, os.path.basename(file.filename.replace(".txt",str(i)+".txt")))
        source = myZip.open(file)
        target = open(path, "wb")

        with source, target:
            shutil.copyfileobj(source, target)

我们在这里所做的是,如果找到该提取目录中的文件名,则在文件名中添加迭代编号,否则与您正在执行的操作相同。我们使用的是迭代编号,因此您可能无法在文件名中获得连续编号,但我相信它可以解决您的问题。


推荐阅读