Python中使用open函数操作文件时为何无读取权限?求解答
为什么Python的open函数会提示文件无读取权限?
嘿,这个问题我在日常开发里碰到过好多次,大概率是下面这几个原因导致的,一个个给你捋清楚:
1. 操作系统层面的文件/目录权限限制
这是最常见的原因。不管是Linux/macOS还是Windows,每个文件和目录都有对应的权限控制规则:
- 在Linux/macOS下,用
ls -l命令查看文件权限,比如输出-rw-r--r--,最后三位是其他用户的权限,如果没有r(读权限),当前用户就没法读取这个文件;要是你要访问的文件在某个受限制的目录里(比如/root),哪怕文件本身有权限,目录没权限也会报错。 - 在Windows下,右键文件→属性→安全,看看当前登录用户有没有“读取”或“读取和执行”的权限,有时候文件被设置成只能管理员访问,普通用户打开就会触发权限错误。
举个例子,如果你用root用户创建了/root/data.txt,然后切换到普通用户运行:
open('/root/data.txt', 'r')
肯定会抛出PermissionError: [Errno 13] Permission denied,因为普通用户没权限访问/root目录。
2. 文件正在被其他程序锁定占用
这种情况在Windows上特别常见。比如你用Excel打开了目标文件,或者用记事本编辑后没关闭,这时候文件处于被其他程序独占锁定的状态,Python尝试读取时就会触发权限相关的错误(有时候会直接提示“文件被占用”,但偶尔也会表现为权限拒绝)。
我之前帮同事排查过一次,他的脚本一直报权限错误,结果发现是他自己把文件开在Excel里忘了关,关掉Excel后立刻就正常了。
3. 路径错误导致的“假权限问题”
有时候你以为自己指向的是目标文件,但实际路径写错了,不小心指向了一个你没有权限访问的文件或目录。比如:
- 把相对路径写成了绝对路径,比如本来要读当前目录的
data.txt,写成了open('/data.txt', 'r'),而根目录下的data.txt是管理员创建的,你没权限读。 - 路径里包含了特殊字符或者空格没转义(Windows下常见),比如
open('My Documents/data.txt', 'r'),要是没加引号或者用原始字符串,可能会解析错误,指向一个不存在的位置,有时候也会被系统判定为权限问题。
4. Python运行环境的权限限制
你的Python脚本运行时的身份,和你当前登录的用户身份可能不一样:
- 比如在Windows上,你用普通用户打开VS Code,但脚本需要读取C盘根目录的系统文件,这时候就得用“以管理员身份运行”VS Code,才能让脚本获得足够的权限。
- 在Linux下,如果你用普通用户运行脚本,要读取
/var/log/syslog这类只有root能读的文件,就得用sudo python3 your_script.py来提升权限。
5. 特殊文件类型的限制
如果目标文件是系统核心文件、虚拟文件系统里的文件(比如Linux的/proc下的某些文件),或者是加密的文件(比如BitLocker加密的磁盘里的文件),即使你有表面上的权限,系统也会阻止Python读取这些文件,从而抛出权限错误。
快速排查步骤
- 先确认文件路径是否正确,手动打开文件看看能不能正常访问;
- 检查文件有没有被其他程序占用;
- 用系统工具查看文件和所在目录的权限设置;
- 尝试用更高权限的身份运行Python脚本(比如管理员/root)。
内容的提问来源于stack exchange,提问作者Sakraan Hussain Saadi
相关产品推荐
相关产品推荐

