Python zipfile dosen’t release zip-файл

Я пытаюсь использовать библиотеку zipfile для Windows 8.1 и python 2.7.9.

Я просто хочу удалить library.zip после zipfile.open (), но os.remove () выдает «WindowsError [Ошибка 32]», и кажется, что zipfile не освобождает zip-файл из блока.

WindowsError 32 означает «Процесс не может получить доступ к файлу, потому что он используется другим процессом».

Итак, как я могу удалить этот файл library.zip?

код:

import os import zipfile as z dirs = os.listdir('build/') bSystemStr = dirs[0] print("[-] Merging library.zip...") with z.ZipFile('build/' + bSystemStr + '/library.zip', 'a') as z1: with z.ZipFile('build_temp/' + bSystemStr + '/library.zip', 'r') as z2: for t in ((n, z2.open(n)) for n in z2.namelist()): try: z1.writestr(t[0], t[1].read()) except: pass print("[-] Cleaning temporary files...") os.remove('build_temp/' + bSystemStr + '/library.zip') 

ошибка:

 [-]Merging library.zip... ... build.py:74: UserWarning: Duplicate name: 'xml/sax/_exceptions.pyc' z1.writestr(t[0], t[1].read()) build.py:74: UserWarning: Duplicate name: 'xml/sax/expatreader.pyc' z1.writestr(t[0], t[1].read()) build.py:74: UserWarning: Duplicate name: 'xml/sax/handler.pyc' z1.writestr(t[0], t[1].read()) build.py:74: UserWarning: Duplicate name: 'xml/sax/saxutils.pyc' z1.writestr(t[0], t[1].read()) build.py:74: UserWarning: Duplicate name: 'xml/sax/xmlreader.pyc' z1.writestr(t[0], t[1].read()) build.py:74: UserWarning: Duplicate name: 'xmllib.pyc' z1.writestr(t[0], t[1].read()) build.py:74: UserWarning: Duplicate name: 'xmlrpclib.pyc' z1.writestr(t[0], t[1].read()) build.py:74: UserWarning: Duplicate name: 'zipfile.pyc' z1.writestr(t[0], t[1].read()) [-] Cleaning temporary files... Traceback (most recent call last): File "build.py", line 79, in  os.remove('build_temp/' + bSystemStr + '/library.zip') WindowsError: [Error 32] : 'build_temp/exe.win32-2.7/library.zip' 

    Я думаю, вы должны закрыть свой архив, прежде чем удалять его или выйти из программы, как он говорит в документации python https://docs.python.org/2/library/zipfile.html#zipfile.ZipFile.close

    Поэтому запустите z1.close() и z2.close() перед удалением архива

    Ваш код должен выглядеть так:

     import os import zipfile as z dirs = os.listdir('build/') bSystemStr = dirs[0] print("[-] Merging library.zip...") with z.ZipFile('build/' + bSystemStr + '/library.zip', 'a') as z1: with z.ZipFile('build_temp/' + bSystemStr + '/library.zip', 'r') as z2: for t in ((n, z2.open(n)) for n in z2.namelist()): try: z1.writestr(t[0], t[1].read()) except: pass z2.close() z1.close() print("[-] Cleaning temporary files...") os.remove('build_temp/' + bSystemStr + '/library.zip') 

    Если я ошибаюсь, поправьте меня.