Python学习笔记18:进阶篇(七)常见标准库使用之OS模块

news2024/10/7 16:25:03

前言

入门到进阶的知识点基本都学习了,可能有一些遗漏的请谅解,不过只要坚持学习下去,在后面的学习中进行查缺补漏。

根据Python crash course书中的进度,要准备开始写小项目了。在这之前,我看了Python的官方教程,里面有很多标准库的介绍和学习,想了想这些也记录一下。

教程中大概包含20个模块,不会一次讲完,留下消化吸收的时间。

这里贴一下教程地址:https://docs.python.org/zh-cn/3/tutorial/stdlib.html

操作系统接口

os模块是Python标准库中的一个核心模块,它提供了大量与操作系统交互的功能。

文件和目录操作

  • 创建、删除、重命名:
    • os.mkdir():创建目录。
    • os.rmdir():删除空目录。
    • os.rename():重命名文件或目录。
import os

# 创建目录
new_dir = "test_directory"
os.mkdir(new_dir)
print(f"Directory '{new_dir}' created.")

# 删除目录
os.rmdir(new_dir)
print(f"Directory '{new_dir}' removed.")

在这里插入图片描述

目录就已经创建成功了,注意一下之前讲过的相对路径和绝对路径。
接下来我们改一下目录的名字。

# 新目录名
new_dir_name = "new_directory"

# 使用os.rename()函数重命名目录
try:
    os.rename("test_directory", new_dir_name)
    print(f"Directory 'test_directory' has been renamed to '{new_dir_name}'.")
except OSError as e:
    print(f"Error: {e.strerror}")

在这里插入图片描述
这里我们使用了之前学了异常处理,当你指定的旧目录不存在是会,会抛出错误信息,这里我们提前捕获处理。不信的话你可以试试哦。

最后我们把这个目录删除掉。

# 删除目录
os.rmdir("new_directory")
print(f"Directory 'new_directory' removed.")

在这里插入图片描述
通过对比,我们很明显的发现先创建,再修改的目录已经被删除掉了

由于贴图占位置过多,后续的有些示例我多个示例贴一个图,或者不贴图只贴出示例代码。

示例代码可以拿去执行试试,但是我建议自己写。

  • 获取文件属性:
    • os.stat():获取文件或目录的状态信息,如大小、修改时间。
print(os.stat("part_one.py"))

在这里插入图片描述
大家可以看到,输出了一堆东西,我简单介绍一下,有兴趣的可以自行深入了解。

  1. st_mode: 文件的模式,包括文件类型(如普通文件、目录、符号链接等)和权限位。是一个包含文件类型和权限位的比特掩码
  2. st_ino: 文件的inode编号(Unix-like系统)。在Windows系统中,这个值可能没有意义。
  3. st_dev: 文件所在设备的ID。
  4. st_nlink: 文件的硬链接数。
  5. st_uid: 文件所有者的用户ID。
  6. st_gid: 文件所属组的组ID。
  7. st_size: 文件的大小(以字节为单位)。
  8. st_atime: 上次访问时间(时间戳,单位通常是秒)。
  9. st_mtime: 上次修改时间(时间戳,单位通常是秒)。
  10. st_ctime: 上次状态改变时间(如权限或所有权变更的时间,时间戳,单位通常是秒)。在某些系统上,这也可以表示文件的创建时间。
  • 权限与所有权管理:
    • os.chmod():改变文件权限。
    • os.chown():改变文件的所有者和组。

了解一下就行。
在操作文件权限和所有权前,我们一般需要通过os.stat()函数获取文件的信息。就比如我们的part_one.py文件。

文件类型
S_IFDIR: 目录。如果st_mode的最高位(第12位)为1,则表示这是一个目录。
S_IFREG: 普通文件。如果最高位为0,并且接下来的位(第11位)为1,则表示这是一个常规文件。
S_IFLNK: 符号链接。如果第10位为1,则表示这是一个软链接(符号链接)。
S_IFCHR: 字符设备文件。如果第6位为1,第3位至第5位不全为0,则表示字符设备。
S_IFBLK: 块设备文件。如果第6位为1,第3位至第5位全为0,则表示块设备。
S_IFIFO: FIFO(命名管道)。如果第0位为1,则表示这是一个FIFO。
权限位
权限位分为三组,分别代表文件所有者、所属组和其他用户的权限。
每组三位,分别代表读、写、执行权限:
读权限 (4):如果位设置,则有读权限。
写权限 (2): 如果位设置,则有写权限。
执行权限 (1): 如果位设置,则有执行权限。
例如,一个典型的可执行文件权限可能是755,这意味着: 所有者有读、写、执行权限(4+2+1=7),所属组和其他用户只有读和执行权限(4+1=5)

路径操作

  • 工作目录操作:

    • os.chdir(path):改变当前工作目录。
    • os.getcwd():获取当前工作目录。
    • os.makedirs():创建多级目录。
    • os.rmdir():删除空目录。
  • 目录内容列出:

    • os.listdir(path=None):列出指定目录下的文件和目录名。
  • 拼接与规范化:

    • os.path.join():连接路径名。
    • os.path.abspath():返回规范化的绝对路径。
  • 存在性检查:

    • os.path.exists():检查路径是否存在。
    • os.path.isfile():检查是否为文件。
    • os.path.isdir():检查是否为目录。
  • 路径分解:

    • os.path.split():分割路径为目录和文件名。
    • os.path.dirname():获取路径中的目录部分。
    • os.path.basename():获取路径中的文件名部分。
# 当前目录
current_directory = os.getcwd()
print(f"当前工作目录: {current_directory}")
# 更改目录
new_path = "E:/python_project/learn_base/x/day6"  # 更改为实际的目录路径
os.chdir(new_path)
print(f"已切换到目录: {os.getcwd()}")
# 创建多级目录
new_dir_path = "E:/python_project/learn_base/x/day7/os"
os.makedirs(new_dir_path, exist_ok=True)  # exist_ok=True 避免在目录已存在时抛出异常
print(f"目录已创建: {new_dir_path}")
# 删除空的目录
dir_to_remove = "E:/python_project/learn_base/x/day7/os"
os.rmdir(dir_to_remove)  # 确保目录为空
print(f"目录已删除: {dir_to_remove}")
# 拼接路径
path_parts = ("home", "user", "documents")
combined_path = os.path.join(*path_parts)
print(f"合并后的路径: {combined_path}")
# 绝对路径
relative_path = "./part_one.py"
absolute_path = os.path.abspath(relative_path)
print(f"绝对路径: {absolute_path}")
# 分割文件名和目录名
full_path = "/home/user/documents/example.txt"
dir_name, file_name = os.path.split(full_path)
print(f"目录部分: {dir_name}, 文件名部分: {file_name}")
# 文件名
full_path = "E:/python_project/learn_base/x/day7/part_one.py"
base_name = os.path.basename(full_path)
print(f"基本文件名: {base_name}")
# 目录路径
directory = os.path.dirname(full_path)
print(f"目录部分: {directory}")
# 检查是否存在
path_to_check = "E:/python_project/learn_base/x/day7/part_one.py"
if os.path.exists(path_to_check):
    print("路径存在")
else:
    print("路径不存在")
# 检查是否文件
file_path = "/path/to/some/file.txt"
if os.path.isfile(file_path):
    print("这是一个文件")
else:
    print("这不是一个文件或路径不存在")
# 检查是否目录
dir_path = ":/python_project/learn_base/x/day7"
if os.path.isdir(dir_path):
    print("这是一个目录")
else:
    print("这不是一个目录或路径不存在")

在这里插入图片描述

环境变量管理

  • 读取与设置:
    • os.environ.get(key[, default]):获取环境变量值。
    • os.environ['environ_name'] = 'environ_value':设置一个新的环境变量。
    • del:设置默认环境变量值。
    • os.environ.setdefault(key, value):设置默认环境变量值。
# 读取PATH环境变量
path_var = os.environ.get('PATH')
print(f"PATH环境变量的值: {path_var}")
# 设置一个新的环境变量
os.environ['MY_VARIABLE'] = 'Hello, World!'
print(f"新设置的环境变量 MY_VARIABLE: {os.environ['MY_VARIABLE']}")
# 假设之前设置了环境变量MY_VARIABLE
if 'MY_VARIABLE' in os.environ:
    del os.environ['MY_VARIABLE']
    if 'MY_VARIABLE' not in os.environ:
        print("环境变量 MY_VARIABLE 已被删除")
    else:
        print("删除环境变量 MY_VARIABLE 失败")
else:
    print("环境变量 MY_VARIABLE 不存在")
# 尝试获取名为 'MY_APP_SETTING' 的环境变量,如果不存在,则设置默认值为 'default_value'
my_setting = os.environ.setdefault('MY_APP_SETTING', 'default_value')
print(f"环境变量 'MY_APP_SETTING' 的值为: {my_setting}")

在这里插入图片描述

操作系统信息

  • 系统类型:

    • os.name:表示当前平台类型(如’posix’、‘nt’)。
  • 详细系统信息(Unix-like系统):

    • os.uname():提供系统信息,如内核名称、主机名等。注意Windows无法执行这个函数。

另外关于对操作系统的操作模块,更推荐使用platform。

# 输出可能是 'posix'(代表类Unix系统,包括Mac和Linux)或 'nt'(代表Windows系统)
os_type = os.name
print(f"操作系统类型: {os_type}")

在这里插入图片描述

结尾

通过os模块,我们能够轻松地进行文件系统操作、系统管理任务及实现与操作系统紧密结合的应用程序。重在记住有哪些功能,常用函数的参数,返回值等信息。

作业

  1. 根据本篇文章示例函数在自己本机上编写代码并执行。
  2. 了解platform模块的功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1859033.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis-主从复制-配置主从关系

文章目录 1、修改配置文件中的 bind ,注释该配置,取消绑定仅主机登录2、修改protected-mode 为no,取消保护模式3、查看redis的进程状态4、配置6380是6379的从机5、配置6381是6379的从机6、查看主机 6379 的主从信息 1、修改配置文件中的 bind ,注释该配置,取消绑定仅主机登录 …

Linux 运维 | 4.从零开始,文件目录特殊权限管理实践

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] 0x00 前言简述 描述:前一章,学习了Linux系统中的用户与用户组的管理,此章节我们将继续学习Linux系统中比较基础且重要的文件权限设置与属性管理,在L…

Zoho邮箱怎么注册?最强完整指南

Zoho企业邮箱,凭借其16年的产品历程和卓越的服务品质,已经成为全球超过1800万企业级客户的信赖之选。今天,我们将手把手教你如何注册Zoho邮箱。 一、Zoho邮箱是什么? Zoho邮箱是Zoho Workplace套件中的核心产品,专门…

2024年通信技术与计算机科学国际学术会议(ICCTCS 2024)

2024年通信技术与计算机科学国际学术会议(ICCTCS 2024) 2024 International Academic Conference on Communication Technology and Computer Science(ICCTCS 2024) 会议简介: 2024年通信技术与计算机科学国际学术会议…

[数据集][目标检测]花生米计数霉变检测数据集VOC+YOLO格式387张2类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):387 标注数量(xml文件个数):387 标注数量(txt文件个数):387 标注类别…

如何提高LabVIEW开发的效率?

提高LabVIEW开发效率对于工程师和研究人员来说非常重要,因为这不仅能缩短开发周期,还能提高系统的可靠性和可维护性。以下从多个角度详细分析如何提高LabVIEW开发的效率。 1. 项目规划与管理 1.1 明确需求 在项目开始前,详细明确项目需求&…

网络构建关键技术_2.IPv4与IPv6融合组网技术

互联网数字分配机构(IANA)在2016年已向国际互联网工程任务组(IETF)提出建议,要求新制定的国际互联网标准只支持IPv6,不再兼容IPv4。目前,IPv6已经成为唯一公认的下一代互联网商用解决方案&#…

苍穹外卖-管理端

课程安排 软件开发介绍 软件开发流程 角色分工 软件环境 项目介绍 产品原型 技术选型 开发环境搭建 niginx反向代理 完善登录功能 导入接口文档 Swagger注解 员工管理 新增员工 ThreadLocal 员工分页查询 启用禁用功能 修改员工信息 导入分类模块需求代码 公共字段自动填充 菜…

《中国尘肺病农民工调查报告(2023)》

这份报告由中华社会救助基金会大爱清尘基金发布。 《中国尘肺病农民工调查报告(2023)》是一份深入探讨中国尘肺病农民工现状与挑战的研究报告。报告不仅详细记录了尘肺病患者的生存困境、经济与医疗状况,还对政策的实施效果进行了评估,并提出了针对性的建议。通过对不同地区、…

Promise类型

Promise类型 Promise类型Promise是一个类型,与C#中的Task类似,是用来包装异步操作的容器。 (1)Promise有三种状态:pending(进行中)fulfilled/resolved(已成功)和rejected(已失败&am…

react笔记-04redux篇

redux和react-redux笔记,以及项目中如何使用,对redux的封装,让其使用类似于vuex一样方便。 一、redux 1. redux工作流程 流程:创建action > dispatch分发action > 交给store > reducer加工数据返回给store 2. redux的…

Python 类对象

Python 类对象 经典迭代器 可迭代对象的定义: 使用内置的iter可以获取迭代器的对象。如果对象实现了能返回迭代器的__iter__方法,那么对象就是可迭代的。序列都可以迭代。实现了__getitem__方法,而且接受从0开始的索引,这种对象也…

2024年,AI的机会在行业大模型吗?

前言 随着科技的不断进步,人工智能(AI)正以前所未有的速度改变着我们的世界。而在2024年,AI的机会无疑将更加聚焦于行业大模型。这些模型不仅代表着技术的巅峰,更是推动行业创新、提升效率、优化体验的关键力量。 行…

UE5 场景物体一键放入蓝图中

场景中,选择所有需要加入到蓝图的模型或物体。 点击 蓝图按钮,点击“将选项转换为蓝图” 在创建方法中,选择“子Actor”或着 “获取组件” 如果需要保持相对应的Actor的父子级别(多层),那么选择“获取组件…

分布式事务msb

分布式事务使用场景 添加商品看库存够不够。库存扣减,扣完给订单服务一个响应,如果新加商品出问题了怎么回滚。 分布式事务概念 XA规范 XA规范:总之一句话: 就X/Open DTP 定义的 事务协调者与数据库之间的接口规范(即…

2024 年计算机专业是否依旧稳坐就业市场的黄金宝座?

引言:选择的十字路口 随着 2024 年高考的结束,一股新的就业浪潮即将席卷全国 - 百万计的高三毕业生站在了人生的十字路口,面对着选专业这一重大决策。 计算机科学及相关领域,长久以来被誉为就业市场的“黄金门票”,吸…

代码随想录训练营第十六天 513找树左下角的值 112路径总和I 113路径总和II 106从中序和后序遍历序列构造二叉树

第一题: 原题链接:513. 找树左下角的值 - 力扣(LeetCode) 思路:用回溯的思想: 这题就是求最大深度,当遍历到第一个最大深度的时候,记录下的节点值就是最左边的元素。 参数和返回…

声波的种类

声波可以根据不同的特性进行分类,主要包括频率和传播方式两个方面: ### 按频率分类: 1. **次声波**:频率低于20Hz的机械波,这类波通常不能被人耳感知。 2. **可闻声波**:频率在20Hz至20kHz之间的机械波&am…

5. Revit API: Application

5. Revit API: Application 前言 上一篇中,讲到了UI篇的Ribbon(界面),并提到要创建 RibbonPanel,需要使用UIControlledApplication.CreateRibbonPanel(..)方法,还在结尾说到要写“UI”开头的那些个类&…

Spring循环依赖问题——从源码画流程图

文章目录 关键代码相关知识为什么要使用二级缓存为什么要使用三级缓存只使用两个缓存的问题不能解决构造器循环依赖为什么多例bean不能解决循环依赖问题初始化后代理对象赋值给原始对象解决循环依赖SpringBoot开启循环依赖 循环依赖 在线流程图 关键代码 从缓存中查询getSingl…