如何从 zipfile 关闭 zip 文件?
How to close zip file, from zipfile?
当我尝试解压缩文件并删除旧文件时,它说它仍然是运行,所以我使用了关闭功能,但它没有关闭它。
这是我的代码:
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。这样你根本不用关闭。 :)
with ZipFile(f'{onlineLatest}.zip', 'r') as zf:
zf.extractall(f'{onlineLatest}')
将评论中的讨论总结为答案:
在 Windows 操作系统上,与 Linux 不同,如果系统上有任何进程打开该文件的文件句柄,则无法删除该文件。
在这种情况下,您通过句柄 fh
写入文件并通过 myzip
读回。在删除它之前,您必须关闭两个文件句柄。
当我尝试解压缩文件并删除旧文件时,它说它仍然是运行,所以我使用了关闭功能,但它没有关闭它。
这是我的代码:
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。这样你根本不用关闭。 :)
with ZipFile(f'{onlineLatest}.zip', 'r') as zf:
zf.extractall(f'{onlineLatest}')
将评论中的讨论总结为答案:
在 Windows 操作系统上,与 Linux 不同,如果系统上有任何进程打开该文件的文件句柄,则无法删除该文件。
在这种情况下,您通过句柄 fh
写入文件并通过 myzip
读回。在删除它之前,您必须关闭两个文件句柄。