zipfile-如何允许提取所有文件,即使是同名文件?

v440hwme  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(377)

我正在使用以下代码进行解压缩过程:
我有两个分开的.zip文件,每个文件都有相同的文件名和文件类型,但是当我执行这段代码时,只显示一个提取的文件,而不是两个。
结果是:

代码:

import os, zipfile

dir_name = 'C:\\Users\\Efste\\Desktop\\Test'
extension = ".zip"

os.chdir(dir_name) # change directory from working dir to dir with files

for item in os.listdir(dir_name):
    if item.endswith(extension):
        file_name = os.path.abspath(item)
        with zipfile.ZipFile(file_name, 'r') as zipObj:
            listOfFileNames = zipObj.namelist()
            for fileName in listOfFileNames:
                zipObj.extract(fileName)
                zipObj.extract(fileName, os.path.basename(item).replace('.zip',''))

我需要的是通过向复制的文件添加一个增量数字来保留这两个文件。

hmae6n7t

hmae6n7t1#

不检查目标文件是否已存在。
注:
我将调试打印添加到控制台,以便您可以看到发生了什么。

import sys
import os
import zipfile
import uuid

def guid1():
    uniqueid = uuid.uuid4()
    guid = str(uniqueid)
    return guid

def zipextract(zip_file, dest_folder):
    print 'reading zip: {}'.format(zip_file)
    myzip = zipfile.ZipFile(zip_file,'r')
    for zib_e in myzip.namelist():
        destination = os.path.abspath(dest_folder)
        filename = os.path.basename(zib_e)
        extension = os.path.splitext(filename)[1]

        extract_to = destination + '/' + filename + "_" + guid1()
        if extension:
            extract_to = extract_to + "." + extension

        if not filename:
            continue
        print "extracting: '{}' to '{}'".format(filename, extract_to)
        data = myzip.read(zib_e)
        output = open(extract_to, 'wb') # exporting to given location one by one
        output.write(data)
        output.close()
        #data.close()
    myzip.close()

# execute only if run as a script

if __name__ == "__main__":
    # get command line arguments (0 is the command called, e.g. your script)  
    zip_file = sys.argv[1]
    to_folder = sys.argv[2]

    dir_name = 'C:\\Users\\Efste\\Desktop\\Test'
    os.chdir(dir_name) # change directory from working dir to specified
    for f in os.listdir(dir_name):
        if f.endswith(".zip"):
        zipextract(f, to_folder)

因此,您将在文件名和扩展名之间获得一个唯一的id。
此解决方案是否符合您的要求?

另见

使用python提取zipfile,显示进度百分比(许多解压的调整)
在python中重命名并提取zipfile(为每个现有文件名添加唯一id)

相关问题