如何使用 Pathlib 检查文件夹/文件权限

Posted

技术标签:

【中文标题】如何使用 Pathlib 检查文件夹/文件权限【英文标题】:How to check folder / file permissions with Pathlib 【发布时间】:2019-10-24 05:16:57 【问题描述】:

是否有与 os.access() 等效的 Pathlib?

如果没有 Pathlib,代码将如下所示:

import os
os.access('my_folder', os.R_OK)  # check if script has read access to folder

但是,在我的代码中,我处理的是 Pathlib 路径,所以我需要这样做(这只是一个示例):

# Python 3.5+
from pathlib import Path
import os

# get path ~/home/github if on Linux
my_folder_pathlib = Path.home() / "github"
os.access(str(my_folder_pathlib), os.R_OK)

str() 的演员阵容有点丑陋。 我想知道是否有纯 Pathlib 解决方案来实现我想要实现的目标?

附言我知道“更容易请求原谅”的原则,但这是更大框架的一部分,我需要尽快知道脚本是否具有对 NAS 存储文件夹的正确权限。

【问题讨论】:

【参考方案1】:

从 Python 3.6 开始,os.access() 接受类似路径的对象,因此不再需要 str(): https://docs.python.org/3/library/os.html#os.access

虽然这仍然不是一个纯粹的 Pathlib 解决方案。

【讨论】:

【参考方案2】:

对 Path 对象使用 stat() 方法,然后查找 st_mode 属性。

Path().stat().st_mode

【讨论】:

如何解释 st_mode 的输出?找不到任何文档... docs.python.org/3/library/stat.html【参考方案3】:

也许一些八进制代码可以让我们免于导入额外的库!我们这里的工具是GNU statAND bitwise,但是基本用法没必要知道。

检查文件读取访问的示例:

from pathlib import Path

filepath = Path('/path/to/file')
if not filepath.stat().st_mode & 0o444:
    print(f'filepath is not readable. Check permissions.')

八进制权限:

0o444:所有者、组和其他人的读取权限。 0o555:所有者、组和其他人的读写权限。 0o666:所有者、组和其他人的读写权限。 0o777:所有者、组和其他人的读取、写入和执行权限。

参考资料:

How to get octal file permissions on Linux/Unix command line

【讨论】:

以上是关于如何使用 Pathlib 检查文件夹/文件权限的主要内容,如果未能解决你的问题,请参考以下文章

如何检查写入目录或文件的权限?

Python中如何删除一个文件

Python入门教程第71篇 检查文件存在性

当“受控文件夹访问”打开时如何检查 .NET 中的目录写入权限

如何在不使用try语句的情况下查看文件是否存在

如何检查特定目录的权限?