【问题标题】:Permission denied error while writing to a file in Python在 Python 中写入文件时权限被拒绝错误
【发布时间】:2020-06-05 00:42:33
【问题描述】:

我想创建一个文件并在 python 中写入一些整数数据。例如,我有一个变量 abc = 3,我正在尝试将它写入一个文件(该文件不存在,我假设 python 会自行创建它):

fout = open("newfile.dat", "w")
fout.write(abc)

首先,python 会自己创建一个 newfile.dat 吗?其次,它给了我这个错误:

IOError: [Errno 13] Permission denied: 'newfile.dat'

这里有什么问题?

【问题讨论】:

  • 是python必须自己创建,但是你能看到文件夹权限吗?

标签: python


【解决方案1】:

如果文件在您的计算机上仍然打开,请关闭该文件,然后尝试运行 python 代码。 我希望它有效

【讨论】:

  • “w”模式在创建文件时看起来是正确的。如果不是打开的文件,可能是工作目录的权限问题? OP 使用的是什么操作系统?
  • 如果无头运行/使用 python 打开,请确保有一个 file.close()
【解决方案2】:

当您尝试创建与目录同名的文件时也会发生这种情况:

import os

conflict = 'conflict'

# Create a directory with a given name
try: 
    os.makedirs(conflict)
except OSError:
    if not os.path.isdir(conflict):
        raise

# Attempt to create a file with the same name
file = open(conflict, 'w+')

结果:

IOError: [Errno 13] Permission denied: 'conflict'

【讨论】:

    【解决方案3】:

    我在使用 cmd(windows 命令行)时遇到了同样的问题

    C:\Windows\System32> "G:\my folder\myProgram.py"
    

    在python文件里面是这样的

    myfile = open('myOutput.txt', 'w')
    

    错误是当你不使用完整路径时,python 会使用你的当前目录,因为 cmd 上的默认目录是

    C:\Windows\System32 
    

    这行不通,因为它似乎是写保护,需要管理员的许可和确认

    相反,您应该使用完整路径,例如:

    myfile = open('G:\my folder\myOutput.txt', 'w')
    

    【讨论】:

    • 我只是想补充一下,这就是我的情况。我使用 Windows 任务计划程序和一个 .bat 文件来运行我的 Python 脚本,在添加文件的完整路径之前出现权限错误。
    • 使用 os.chdir(path) 将 cwd 设置为文件所在的位置
    【解决方案4】:

    权限被拒绝仅仅意味着系统没有权限将文件写入该文件夹。从终端使用“sudo chmod 777”授予文件夹权限并尝试运行它。它对我有用。

    【讨论】:

    • 这也可能意味着该文件确实存在但您不可写:为了写入已经存在的文件,您必须首先“删除”其内容,这意味着对现有文件的写入权限...我今天遇到了这种情况,我花了 30 分钟来弄清楚发生了什么,当时它是如此“简单”。
    【解决方案5】:

    我用 IDLE3.8(python 3.8.0) 编写 python 脚本 我已经解决了这个问题: 如果路径是 shelve.open('C:\\database.dat') 这将是 PermissionError: [Errno 13] Permission denied: 'C:\\database.dat.dat'。 但是当我测试将路径设置为 shelve.open('E:\\database.dat') 那没问题!!! 然后我在我的电脑上测试所有的驱动器(例如C,D,F ...),只有当Path设置在Disk中时

    C:\\

    会得到权限被拒绝的错误。 所以我认为这是windows中的保护路径,以避免python脚本更改或读取系统磁盘(磁盘C)中的文件

    【讨论】:

    • 我遇到了同样的问题。如何获得C盘的写权限?我试过蒙面没有任何运气。我正在制作一个我想默认安装在C:\Program Files 中的工具
    • 我在 Windows 10 中看到了同样的情况。尝试通过 git bash 更改对 C: 下文件夹的权限不起作用。幸运的是,我在D: 上安装了另一个驱动器,并且可以写入该磁盘。
    【解决方案6】:

    回答你的第一个问题:是的,如果文件不存在,Python 会创建它。

    其次,运行python脚本的用户(你自己)没有在目录中创建文件的写权限。

    【讨论】:

    • 这是一个权限错误,现在已修复,但仍然出现此错误:TypeError: expected a character buffer object
    • 要写字符串以外的东西,需要先转换成字符串。见:docs.python.org/2/tutorial/…
    • 要添加到@RobertCaspary 的评论中,您可以使用str(abc) 转换为字符串。所以fout.write(str(abc))
    • 现在不同的问题。这应该是一个不同的问题;)
    • 如何解决从 python 创建目录后写入权限被拒绝的问题?
    【解决方案7】:

    如果您通过终端执行 python 脚本,则通过 --user 提供管理员权限。

    为我工作!

    如果您使用的是 Windows,请以管理员身份运行该文件。

    如果是通过 cmd 执行,请以管理员身份运行 cmd 并执行 python 脚本。

    【讨论】:

      【解决方案8】:

      为了使用 Python 脚本写入文件,您必须先创建一个文本文件。 示例 应该存在 C:/logs/logs.txt 等文件。 只有这样下面的代码才有效:

      logfile=open(r"C:/logs/logs.txt",'w')
      

      总结一下。

      1. 文本文件应存在于指定位置
      2. 确保在运行 Python 脚本之前关闭文件。

      【讨论】:

        【解决方案9】:

        确保您对尝试通过属性创建文件的目录具有写入权限

        【讨论】:

        • 会帮助OP举个例子
        猜你喜欢
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        • 2015-11-24
        • 1970-01-01
        • 2017-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多