【问题标题】:Python unzipping and adding "_" to newly extracted filePython解压缩并将“_”添加到新提取的文件中
【发布时间】:2021-10-04 00:14:35
【问题描述】:

使用此代码,我从 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

【问题讨论】:

  • 最好的办法是在解压缩之前重命名压缩文件,然后在ZipFile 对象上使用extractall 方法。
  • 这并没有解决。
  • 为什么不能解决它?您的问题是文件名重复...
  • 我有很多 zip 文件,我使用这段代码提取这些 zip 文件中的文本文件并将它们放入一个文件中。某些 zip 文件可以具有相同的文本文件名。如果提取了一个名为“okay.txt”的文件,并且在另一个 zip 文件中有一个名为“okay.txt”的文件,我希望这次输出为“okay_1.txt”。这段代码不会这样做,它会更新“okay.txt”文件。您的解决方案,因此我无法将其与此问题完全联系起来。
  • 这能回答你的问题吗? renaming the extracted file from zipfile

标签: python zip unzip


【解决方案1】:

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

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)

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

【讨论】:

  • @MuratcanÇoban 你有没有尝试调试,调试时发现了什么?哪个不是预期的?我没有测试过。我会测试它并通知你!保持联系。 :)
  • 您的代码没有出错。我写的代码也是这样。
  • @MuratcanÇoban 请张贴您的目标目录和 zip 文件的图像!因为它对我来说工作得很好。正如我所料。您可以添加有问题的图像!不要发布图片作为答案。
猜你喜欢
  • 2011-07-30
  • 1970-01-01
  • 2019-02-25
  • 1970-01-01
  • 2020-01-15
  • 1970-01-01
  • 1970-01-01
  • 2017-02-03
  • 2018-12-19
相关资源
最近更新 更多