IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python实例:通过os模块实现指定路径下文件权限的修改方法 -> 正文阅读

[Python知识库]Python实例:通过os模块实现指定路径下文件权限的修改方法

一、问题描述

比如在某目录下包含一系列文件:

MCS51_program.c
algorithm.c
pandas_example.py
numpy_example.py
web_development.java
LINUX_CORE_program.sh
GUI_development.cpp
RISC-V.asm
embedded.rs
...

需求描述:实现给该目录下所有.py.c文件加上用户可执行权限的。这里,我们就要应用python字符串的内容的判断方法实现该需求。

二、实现代码

2.1 创建代码测试文件

在项目目录中创建问题描述的文件,用于代码测试。再创建对.py.c文件加上用户可执行权限的python脚本文件String_Content_Distinguish.py,如下图所示:

在这里插入图片描述

由上图的文件位置关系,在python脚本文件String_Content_Distinguish.py访问文件夹Files中的内容时的路径为:./Filses,其中.表示当前目录。

2.2 对.py和.c文件加上用户可执行权限的实现代码

这里实现对.py.c文件加上用户可执行权限的Python代码,需要附录中的知识。下面的代码哪里看不懂,可以先理解一下附录中相应的内容。

# 导入python内置的文件/目录处理模块os
import os
# 导入文件属性处理模块stat
import stat

# 使用os.listdir('./Files')方法导入Files文件中所有文件名
filenames_list = os.listdir('./Files')

for file in filenames_list:
	# 只对python和c文件进行操作
	if file.endswith(('.py', '.c')):
		# 获得文件的权限值
		file_permission = os.stat('./Files' + file).st_mode
		
		# 使用os.chmod函数增加文件的用户可执行权限
		os.chmod('./Files' + file, file_permission | stat.S_IXUSR)

在这里插入图片描述
执行完上面的程序后,Files文件夹下的python和c文件就编程了用户可执行文件了。

附录

本文实现对.py.c文件加上用户可执行权限的Python代码,需要以下知识储备:

1. str.startswith()和str.endwith()方法

  • (1)str.startswith():判断字符串str是否以某个字符开始;
  • (2)str.endswith():判断字符串str是肉以某个字符结束。

这两个函数的应用非常相似,这里只演示str.endswith()如下图所示:

在这里插入图片描述

其实,我们不仅可以单独判断一个文件的开始/结尾字符情况,也可以通过元组形式判断多个文件的开始/结尾字符情况。比如,下面的代码,只有文件名字符串满足元组中的一个就返回True,如果都不满足则返回False。

file_name_2.endswith(('.py', '.c'))
file_name_2.endswith(('.cpp', '.java'))

上面的代码执行结果如下图所示:

在这里插入图片描述

2. Linux系统的文件属性

Linux系统是一个多用户系统,为了实现系统的安全性,其对不同用户的访问权限进行了不同的设定。在Linux系统中我们可以使用ls -lll来显示文件的属性、所属的用户和组信息。比如,本文中的Files文件内的文件信息如下图所示:

在这里插入图片描述
1、文件类型

在Linux系统中文件的第一个字符(上图绿色框中的内容)表示该文件的类型:

字符描述
d目录
-文件
l链接文档(link file)
b装置文件里面的可供存储的接口设备(可随机存取装置)
c装置文件里面的串口设备,比如键盘、鼠标等

2、文件权限信息
紧接着文件类型字符的9个字符(如上图红框中的内容)表示文件的权限信息。它们三个为一组,且为rwx-中字符的三个参数组合,其中r表示可读(read),w表示可写(write),x表示可执行(execute),-表示没有权限。每组所代表权限的含义如下图所示:

在这里插入图片描述

  • 前3位表示:所有者(Owner)权限,也称为用户权限;
  • 中间3位表示:用户组(Group)权限;
  • 后面3为表示:其他用户(Others)权限。

Linux中对文件权限属性表示方法包括两种:

  • (1)符号表示:比如用上面介绍的rwe-表示文件的读、写、执行权限;
  • (2)数字表示:我们可以将rwe-分别与数字4210一一对应。

用数字表示文件权限属性的具体方法为:每种身份(owner/group/others)各自的四种权限rwx-对应数字的累加。比如,下面的文件权限为rw-rw-r--

在这里插入图片描述
文件的权限数字表示形式为:

  • owner = rw- = 4 + 2 + 0 = 6
  • group = rw- = 4 + 2 + 0 = 6
  • others = r-- = 4 + 0 + 0 = 4

因此,上图文件权限属性的数字表示方式为664

3. 本文用到的os方法

os模块提供了非常丰富的方法用来处理文件和目录,这里只介绍用到的os相关方法。

3.1 os.listdir()方法

os.listdir()方法用于返回指定文件夹所包含文件/文件夹的名称字符串列表。本文中的os.listdir()使用代码如下所示:

import os
os.listdir('./Files')

其输出如下图所示:

在这里插入图片描述

3.2 os.stat()方法

os.stat()方法用于在给定的路径上返回该路径文件/文件夹的信息类对象。比如我们想获取./Files文件夹中MCS51_program.c的信息,可使用如下代码实现:

import os

# 返回文件信息os.stat_result类
os.stat('./Files/MCS51_program.c')

# 查看os.stat函数的返回类型
type(os.stat('./Files/MCS51_program.c'))

# 将文件权限数值以八进制格式显示
oct(os.stat('./Files/MCS51_program.c').st_mode)

输入结果如下图所示:

在这里插入图片描述

由上图可以看出,os.stat()方法的返回为os.stat_result文件信息类,且包含很多属性。其中,本文用到的类属性就是st_mode:文件的权限数值结果,如果将其以八进制显示,这样就与Linux系统下用户、用户组、其他用户的权限数值信息对应上了。

os.stat()方法的os.stat_result文件信息类返回值所包含的属性名及其含义如下表所示:

类属性描述
st_mode节点(文件/文件夹)的权限数值信息
st_ino节点(文件/文件夹)的编号
st_dev节点(文件/文件夹)驻留的设备
st_nlink节点(文件/文件夹)的链接数
st_uid节点(文件/文件夹)的所有者的用户ID
st_gid节点(文件/文件夹)的组ID
st_size普通文件以字节为单位的大小
st_atime上次访问的时间
st_mtime最后一次修改的时间
st_ctimeUnix中表示最新的元数据更改时间,Windows系统上表示创建时间

3.3 os.chmod()方法与stat文件权限常量模块

通常,os.chmod()方法与stat文件权限常量结合使用,通过布尔操作,能够非常方便的修改文件/目录的文件权限。本文就是通过或|操作,在原来的文件权限上添加了用户的可执行的权限。
1、os.chmod()方法
os.chmod()方法用于更改文件/目录的权限,其语法格式如下所示:

os.chmod(path, mode)
  • path:表示字符串格式的文件/目录的路径。
  • mode:表示文件的权限模式,对模式的修改通常结合stat文件权限常量结合使用。

2、stat文件权限常量模块

stat文件权限常量模块包括的文件权限常量及其含义如下表所示(注意,权限数值是以八进制0o表示):

常量描述
stat.S_IXOTH其他用户(OTH, Other)具有可执行(X, execute)权限,数值为0o001
stat.S_IWOTH其他用户具有写(W, Write)权限,数值为0o002
stat.S_IROTH其他用户具有读(R, Read)权限,数值为0o004
stat.S_IRWXO其他用户具有全部权限(权限掩码),数值为0o007
stat.S_IXGRP组用户(GRP, Group)具有可执行(X, execute)权限,数值为0o010
stat.S_IWGRP组用户具有写(W, Write)权限,数值为0o020
stat.S_IRGRP组用户具有读(R, Read)权限,数值为0o040
stat.S_IRWXG组用户具有全部权限(权限掩码),数值为0o070
stat.S_IXUSR拥有者(USR, User)具有可执行(X, execute)权限,数值为0o100
stat.S_IWUSR拥有者具有写(W, Write)权限,数值为0o200
stat.S_IRUSR拥有者具有读(R, Read)权限,数值为0o400
stat.S_IRWXU拥有者具有全部权限(权限掩码),数值为0o700
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 17:36:49  更:2022-04-18 17:39:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:42:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码