【问题标题】:python3.x - PermissionError when attempting to open directory with zipfile and pathlib modulespython3.x - 尝试使用 zipfile 和 pathlib 模块打开目录时出现 PermissionError
【发布时间】:2020-10-25 03:05:24
【问题描述】:

我正在尝试使用 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))

【问题讨论】:

  • 你需要os.path.join(root, file) 因为file 只包含文件名,可能不是正确的路径
  • @alaniwi 所以只是用 "os.path.join(root, file)" 替换 "Path(f"world/{file}")"?
  • @alaniwi 同样的错误。
  • @DyeffersonAzevedo 你看过我的回答了吗?请让我知道您在哪里遇到此问题

标签: python python-3.x path permissions zipfile


【解决方案1】:

这样的错误

PermissionError: [Errno 13] 权限被拒绝

是由于缺少该目录对write/read 的权限。

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-11
      • 1970-01-01
      • 2021-03-11
      • 2021-01-15
      • 1970-01-01
      • 2018-03-26
      • 2017-08-13
      相关资源
      最近更新 更多