【问题标题】:How to close zip file, from zipfile?如何从 zipfile 关闭 zip 文件?
【发布时间】:2022-01-04 01:18:29
【问题描述】:

当我尝试解压缩文件并删除旧文件时​​,它说它仍在运行,所以我使用了关闭功能,但它没有关闭它。

这是我的代码:

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")

【问题讨论】:

  • 嘿,我尝试了我的 ZIP 之一的相同代码,它正在正常工作,没有错误
  • 您在 Windows 上运行吗?这可能是特定于操作系统的行为。
  • @joanis 是的,但我也打算在 linux 上运行
  • 我没有看到关闭fh的电话,我敢打赌这就是问题所在。
  • @joanis 就是这样,我出于某种原因试图关闭状态,我从没想过关闭 fh, tysm

标签: python windows zip python-zipfile


【解决方案1】:

尝试使用 with。这样你就不用关闭了。 :)

with ZipFile(f'{onlineLatest}.zip', 'r') as zf:
    zf.extractall(f'{onlineLatest}')

【讨论】:

  • 对不起,我似乎遇到了同样的错误
【解决方案2】:

将 cmets 中的讨论总结为答案:

在 Windows 操作系统上,与 Linux 不同,如果系统上有任何进程在该文件上打开了文件句柄,则无法删除该文件。

在这种情况下,您通过句柄fh 写入文件并通过myzip 将其读回。在删除它之前,您必须关闭两个文件句柄。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多