尝试使用 zipfile 和 pathlib 模块打开目录时出现 PermissionError

PermissionError when attempting to open directory with zipfile and pathlib modules

我正在尝试使用 pathlib 创建一个 zip 文件,但出现权限错误。看代码:

from pathlib import Path
from zipfile import *
import os
from datetime import datetime

time = str(datetime.now())

day = int(time.split(' ')[0].split('-')[2])
month = int(time.split(' ')[0].split('-')[1])
year = int(time.split(' ')[0].split('-')[0])
hour = int(time.split(' ')[1].split(':')[0])
minute = int(time.split(' ')[1].split(':')[1])

filename = f"ilhadodede{day:02d}{month:02d}{year:04d}-{hour:02d}-{minute:02d}.zip"

print(f"{day}/{month}/{year}  {hour}:{minute}")
zipped = ZipFile(filename, "w", ZIP_DEFLATED)
print(Path(Path("world") / file))
for root, dirs, files in os.walk("world"):
    for file in files:
        zipped.write(os.path.join(root, file))

for f in zipped.infolist():
    print(f.filename)

这是错误:

Traceback (most recent call last):
  File "C:/Users/dyeff/Documents/Server Ilha do Dedé/universal_backup.py", line 20, in <module>
    zipped.write(os.path.join(root, file))
  File "C:\Users\dyeff\AppData\Local\Programs\Python\Python38\lib\zipfile.py", line 1776, in write
    shutil.copyfileobj(src, dest, 1024*8)
  File "C:\Users\dyeff\AppData\Local\Programs\Python\Python38\lib\shutil.py", line 202, in copyfileobj
    buf = fsrc_read(length)
PermissionError: [Errno 13] Permission denied

这是抛出错误的行:

        zipped.write(os.path.join(root, file))

这样的错误

PermissionError: [Errno 13] Permission denied

是由于缺乏对该目录 write/read 的许可的结果。

要确认这是错误的原因,您可以尝试在该命令 zipped.write(os.path.join(root, file)) 将输出到的目录中创建并保存一个文件。如果是这种情况,那么您可以查看如何更改您正在使用的操作系统的目录权限,请参阅 here for Linux

如果您正在使用 IDE,您可以尝试在管理模式下打开它,这将给予 运行 脚本执行 write 操作的完全权限。

我的问题是一个名为 session.lock 的文件。 我做了一个 if 语句来忽略那个文件和错误“飞走了”。

这是我的世界文件中的一个文件(这个程序是在我关闭服务器时自动备份一个世界),它存储了玩家上次进入服务器的日期时间,没有那个文件(这个文件是为了备份很重要,所以与它相关的任何东西现在都在我自己的程序中处理)游戏会自动创建它。