Python zipfile 不释放 zip 文件
Python zipfile dosen't release zip file
我正在尝试在 windows 8.1 和 python 2.7.9 上使用 zipfile 库。
我只想在 zipfile.open() 之后删除 library.zip 但是 os.remove() 抛出 "WindowsError [Error 32]" 并且 zipfile 似乎没有释放 zip 文件带块。
WindowsError 32 表示 "The process cannot access the file because it is being used by another process."
那么,我该如何删除这个 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 <module>
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')
如果我错了,请纠正我。
我正在尝试在 windows 8.1 和 python 2.7.9 上使用 zipfile 库。
我只想在 zipfile.open() 之后删除 library.zip 但是 os.remove() 抛出 "WindowsError [Error 32]" 并且 zipfile 似乎没有释放 zip 文件带块。
WindowsError 32 表示 "The process cannot access the file because it is being used by another process."
那么,我该如何删除这个 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 <module>
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')
如果我错了,请纠正我。