共计 1413 个字符,预计需要花费 4 分钟才能阅读完成。
在操作文件和目录时,我们经常需要控制它们的访问权限,以确保只有授权的用户能够读取、写入或执行文件。Python 提供了 os 和 stat 模块来进行文件和目录的权限管理。
- 查看文件权限
使用os.stat()方法可以查看文件的详细信息,包括文件的权限。权限是通过文件的状态信息返回的,权限值通常使用stat模块进行解读。
import os
import stat
file_info = os.stat("example.txt")
print(file_info.st_mode) # 查看文件的权限位
file_info.st_mode 返回一个整数,表示文件的权限信息。通过 stat 模块的常量,可以将其转换为可读的权限格式。
- 转换权限为可读格式
permissions = stat.S_IMODE(file_info.st_mode)
print(oct(permissions)) # 输出权限的八进制格式,例如 0o644
例如,0o644 表示:
- 用户有读写权限
- 组用户和其他用户有只读权限
- 修改文件权限
使用os.chmod()方法来更改文件或目录的权限:
import os
# 设置文件权限为可读写权限(644)os.chmod("example.txt", 0o644)
这里 0o644 表示:文件所有者有读写权限,其他用户只有读取权限。
- 递归修改目录权限
如果要修改目录及其子目录和文件的权限,可以使用os.walk()遍历整个目录:
import os
def change_permissions_recursively(folder_path, permissions):
for root, dirs, files in os.walk(folder_path):
for name in dirs + files:
os.chmod(os.path.join(root, name), permissions)
# 修改目录及文件权限为 755
change_permissions_recursively("myfolder", 0o755)
这个方法将递归地遍历文件夹并修改文件和子文件夹的权限。
- 检查文件是否可读写
在修改文件权限之前,我们有时需要检查文件是否具有某些权限。可以使用os.access()方法:
import os
# 检查文件是否可读
print(os.access("example.txt", os.R_OK)) # 如果文件可读,返回 True
# 检查文件是否可写
print(os.access("example.txt", os.W_OK)) # 如果文件可写,返回 True
- 使用
stat模块获取文件详细信息
除了权限外,stat模块还可以获取文件的大小、修改时间等信息:
import os
import stat
file_info = os.stat("example.txt")
print(f" 文件大小: {file_info.st_size} 字节 ")
print(f" 最后修改时间: {file_info.st_mtime}")
总结:
通过 os 和 stat 模块,Python 提供了强大的文件和目录权限管理功能。我们可以查看、修改文件权限,确保程序和文件的安全性。此外,os.access() 和 stat 模块让我们可以在操作前检查文件的访问权限。
练习与思考:
- 编写一个程序,递归设置某个目录及其子目录的所有文件为只读权限。
- 编写一个程序,检查某个文件是否有执行权限,如果没有则添加执行权限。
- 修改权限设置,使得文件所有者只能读写,而其他用户不能访问。
正文完