2

我正在努力使用以下代码解压缩过程:

我有两个分开的 .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',''))

我需要的是通过向重复的文件添加增量编号来保留这两个文件。

4

1 回答 1

1

不检查目标文件是否已经存在。

笔记:

  • 我在控制台中添加了调试打印,所以你可以看到发生了什么。
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)

所以你会在 file_name 和 extension 之间得到一个唯一的 ID。

此解决方案是否如您所愿?

也可以看看

于 2021-07-08T21:56:01.860 回答