在 Python 中更改文件权限
在 Python 中或围绕 Python 应用程序处理文件时,必须拥有适当的文件权限以帮助实现预期的操作。 从工作脚本文件到数据导出,由 Python 应用程序创建、更新或管理的文件也可以使用 Python 代码进行处理。
通常,大多数开发人员使用文件权限的常用方法是使用命令行命令或脚本。 但是,可以使用特定的内置库及其方法在 Python 中更改文件权限。
本文将讨论如何在 Python 中更改文件权限。
Python 中的操作系统文件权限
在操作系统中,从 Windows 到 Linux,它们都有不同的权限。 读取、写入和执行的权限根据文件的用途设置。
文件资源管理器通常提供 UI 以允许典型用户更改授予文件的文件权限。 然而,对于大多数开发人员来说,命令行界面就是它发生的地方。
对于 Linux(通常是 Unix 系统)甚至 Windows,您可以检查文件权限以及文件所持有的其他信息。
在 Windows 上:
ls
输出:
Directory: C:\Users\USER
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 7/13/2022 8:09 PM .android
d----- 9/23/2022 8:11 PM .vscode
d-r--- 5/9/2022 1:34 PM 3D Objects
d----- 5/12/2022 11:49 PM Apple
d----- 8/30/2022 1:20 PM Autodesk
d-r--- 3/18/2022 6:34 AM Contacts
d-r--- 9/23/2022 8:19 PM Desktop
d-r--- 9/23/2022 8:52 PM Documents
d-r--- 9/28/2022 12:48 PM Downloads
d-r--- 3/18/2022 6:34 AM Favorites
d-r--- 4/28/2022 11:03 AM Links
d-r--- 7/16/2022 10:41 PM Music
d-r--- 4/11/2022 11:39 PM OneDrive
d-r--- 9/22/2022 11:13 AM Pictures
d-r--- 3/18/2022 6:34 AM Saved Games
d-r--- 3/18/2022 6:35 AM Searches
d-r--- 9/26/2022 2:49 PM Videos
-a---- 9/23/2022 8:25 PM 5 .node_repl_history
-a---- 9/27/2022 2:34 AM 1100 pslog.txt
模式选项卡包含文件权限信息,这是显示文件类型的第一列。
同样,对于Linux等Unix系统,可以列出所有的文件信息。
ls -la
输出:
drwxr-xr-x 6 eva users 1024 Jun 8 16:46 sabon
-rw------- 1 eva users 1564 Apr 28 14:35 splus
-rw------- 1 eva users 1119 Apr 28 16:00 splus2
-rw-r--r-- 1 eva users 9753 Sep 27 11:14 ssh_known_hosts
-rw-r--r-- 1 eva users 4131 Sep 21 15:23 swlist.out
-rw-r--r-- 1 eva users 94031 Sep 1 16:07 tarnti.zip
此外,第一列包含模式 (drwxr-xr-x)。 在第一列中,有四个细分。
第一个细分是代表实际文件类型的第一个字符。 第二个细分(接下来的三个字符)显示了用户的访问权限(或权限)。
第三个细分(接下来的三个字符)显示拥有该文件的组的权限。 最后一个细分(最后三个字符)显示其他用户的权限。
现在,我们就用这个drwxr-xr-x模式来解释一下。 在我们继续之前,你需要知道这三个字母代表什么:
- r 表示已读。
- w 表示写。
- x 表示执行。
每个文件或目录都分配有文件所有者、一组相关用户的成员和其他人的访问权限。 权限可以设置为:
- 读取一个文件。
- 写一个文件。
- 执行一个文件。
第一个字符 d 表示它是一个目录。 但是,如果字符是 -,则它是一个典型的文件。
接下来的三组字符 rwx 表示用户可以读取、写入和执行该目录。 接下来的三个 r-x 表示该组可以读取和执行但不能写入目录。
最后三个,r-x,表示其他人可以读取和执行但不能写入目录。
因此,要在 Linux 中更改文件的权限,一个简单的 chmod 命令通常很有用。
chmod u+x someFile
u+x 是给 someFile 的权限。
u+x 权限给someFile的用户(remember,user,group,其他用户)增加(+)执行权限。 请记住,执行由 x 表示。
但是我们可以很容易地在 Python 中实现这一点。 有了这些知识,您现在可以毫无问题地在 Python 中更改文件的权限。
在 Python 中使用 chmod() 更改文件权限
chmod()
方法源于 Linux 中的 chmod 命令,其工作是更改文件或目录的模式。 chmod()
方法可通过 os 模块获得,这是任何 Python 安装或环境的默认设置。
os 模块提供接口和方法,使我们能够与任何操作系统进行交互。 它根据其系统为 NT 或 Posix 提供操作系统例程。
在众多功能中,它允许我们管理目录、检索它们的内容并更改这些目录中的行为和模式。
除了 chmod()
方法之外,我们还需要另一个名为 stat 的模块,它提供常量/函数来解释 os.stat()
和 os.lstat()
的结果。 此统计信息提供了权限标志,我们将需要这些标志来更改用户、组或其他用户的文件权限。
权限标志包括读取、写入和执行操作。
我们必须导入他们的模块才能使用 chmod()
和 stat。
import os, stat
此外,我们需要访问我们想要更改其权限的文件。 os 模块对此也很有用。
chmod()
使用以下语法:
os.chmod(filePath, permissionFlag)
要检查文件(例如,新创建的 index.txt)的当前权限模式,您可以使用 stat()
方法。
perm = os.stat('index.txt')
print(perm.st_mode)
输出:
33206
os.stat()
获取指定路径的状态,而 st_mode 属性提供文件的权限位,其中前两个八进制数字指定文件类型,其他四个是文件权限。
该文件必须与 Python 文件位于同一目录中,或者放置完整的文件路径。
对于 Linux 用户使用八进制表示法(指定权限的两种方式之一),我们可以将权限设置视为一系列位,可以在下面的代码片段中看到。
rwx rwx rwx = 111 111 111
rw- rw- rw- = 110 110 110
rwx --- --- = 111 000 000
# rwx = 111 in binary = 7
# rw- = 110 in binary = 6
# r-x = 101 in binary = 5
# r-- = 100 in binary = 4
要更改权限模式,您可以使用 stat 权限标志:
import os, stat
perm = os.stat('index.txt')
print(perm.st_mode)
os.chmod('index.txt', stat.S_IWGRP)
perm = os.stat('index.txt')
print(perm.st_mode)
输出:
33206
33060
第一个八进制数显示更改前的权限状态,第二个八进制数为添加分组阅读权限后的状态。
您可以使用 |
组合不同的权限标志 操作员。 在这个例子中,我们将为用户添加读、写和执行的权限。
import os, stat
perm = os.stat('index.txt')
print(perm.st_mode)
os.chmod('index.txt', stat.S_IREAD | stat.S_IWRITE | stat.S_IEXEC | stat.S_IRUSR)
perm = os.stat('index.txt')
print(perm.st_mode)
输出:
33060
33206
还有其他权限标志,如下所示:
- stat.S_IREAD、stat.S_IWRITE 和 stat.S_IEXEC 标志分别用于为用户添加对文件的读取、写入和执行权限。
- stat.S_IRGRP、stat.S_IWGRP 和 stat.S_IXGRP 标志分别用于将组的读、写和执行权限添加到文件。
- stat.S_IROTH、stat.S_IWOTH 和 stat.S_IXOTH 标志分别用于为其他用户添加对文件的读、写和执行权限。
- stat.S_IRWXU、stat.S_IRWXG 和 stat.S_IRWXO 标志,分别为用户、组和其他用户同时添加读、写和执行权限。
除了使用权限标志外,您还可以在 chmod()
方法中使用八进制符号。 我们使用八进制数755,指定用户可以读、写和执行,组和其他用户只能读和执行。
os.chmod('index.txt', 0o755)
输出:
33206
您必须添加 0o 前缀以表示它是八进制表示法。
相关文章
Django 中的 Slug
发布时间:2023/05/04 浏览次数:173 分类:Python
-
本篇文章旨在定义一个 slug 以及我们如何使用 slug 字段在 Python 中使用 Django 获得独特的帖子。
在 Django 中按降序过滤查询集中的项目
发布时间:2023/05/04 浏览次数:157 分类:Python
-
在这个讲解中,学习如何借助 Django 中的 order_by() 方法按降序过滤出查询集中的项目。
Django ALLOWED_HOSTS 介绍
发布时间:2023/05/04 浏览次数:181 分类:Python
-
本文展示了如何创建您的 Django 网站,为公开发布做好准备,如何设置 ALLOWED_HOSTS 以及如何在使用 Django 进行 Web 部署期间修复预期的主要问题。
Django 中的 Select_related 方法
发布时间:2023/05/04 浏览次数:129 分类:Python
-
本文介绍了什么是查询集,如何处理这些查询以及我们如何利用 select_related() 方法来过滤 Django 中相关模型的查询。
使用 Post 请求将数据发送到 Django 服务器
发布时间:2023/05/04 浏览次数:159 分类:Python
-
在这篇关于Django的讲解中,我们简要介绍了post和get请求以及如何在Django中用post实现CSRF token。
Django 返回 JSON
发布时间:2023/05/04 浏览次数:106 分类:Python
-
在与我们的讨论中,我们简要介绍了 JSON 格式,并讨论了如何借助 Django 中的 JsonResponse 类将数据返回为 JSON 格式。
在 Django 中创建对象
发布时间:2023/05/04 浏览次数:59 分类:Python
-
本文的目的是解释什么是模型以及如何使用 create() 方法创建对象,并了解如何在 Django 中使用 save() 方法。
在 Django 中为多项选择创建字段
发布时间:2023/05/04 浏览次数:75 分类:Python
-
在本文中,我们将着眼于为多项选择创建一个字段,并向您展示如何允许用户在 Django 中进行多项选择。