[英]How to close zip file, from zipfile?
当我尝试解压文件并删除旧文件时,它说它仍在运行,所以我使用了关闭 function,但它没有关闭它。
这是我的代码:
import zipfile
import os
onlineLatest = "testFile"
myzip = zipfile.ZipFile(f'{onlineLatest}.zip', 'r')
myzip.extractall(f'{onlineLatest}')
myzip.close()
os.remove(f"{onlineLatest}.zip")
我得到这个错误:
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'Version 0.1.2.zip'
有人知道怎么修这个东西吗?
只有之前运行过的其他部分,但不要认为这是问题所在:
request = service.files().get_media(fileId=onlineVersionID)
fh = io.FileIO(f'{onlineLatest}.zip', mode='wb')
downloader = MediaIoBaseDownload(fh, request)
done = False
while done is False:
status, done = downloader.next_chunk()
print("Download %d%%." % int(status.progress() * 100))
myzip = zipfile.ZipFile(f'{onlineLatest}.zip', 'r')
myzip.extractall(f'{onlineLatest}')
myzip.close()
os.remove(f"{onlineLatest}.zip")
尝试使用。 这样你就不用关闭了。 :)
with ZipFile(f'{onlineLatest}.zip', 'r') as zf:
zf.extractall(f'{onlineLatest}')
将评论中的讨论总结为答案:
在 Windows 操作系统上,与 Linux 不同,如果系统上有任何进程在该文件上打开了文件句柄,则无法删除该文件。
在这种情况下,您通过句柄fh
写入文件并通过myzip
将其读回。 在删除它之前,您必须关闭两个文件句柄。
windows 的代码需要写什么解决方案? 尽管我已经关闭了所需的文件,但我收到了同样的错误
import zipfile
import os
srcfile = 'C:/Users/x.zip'
dstfile = 'C:/Users/x_out.zip'
inzip = zipfile.ZipFile(srcfile, 'r')
outzip = zipfile.ZipFile(dstfile, "w")
for inzipinfo in inzip.infolist():
print(inzipinfo)
# Read input file
infile = inzip.open(inzipinfo)
if inzipinfo.filename == "x.tds":
content = infile.read()
#print(content)
new_content = str(content, 'utf-8').replace("abc", "xyz")
outzip.writestr(inzipinfo.filename, new_content)
else: # Other file, dont want to modify => just copy it
content = infile.read()
outzip.writestr(inzipinfo.filename, content)
inzip.close()
outzip.close()
thisFile = 'C:/Users/x.zip'
base = os.path.splitext(thisFile)[0]
os.rename(thisFile, base + ".tdsx")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.