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

前言

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

根据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.mzph.cn/bicheng/34674.shtml

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

相关文章

房产平台系统小程序源码

🏠 一键解锁购房新体验 🔓 房产小程序 实现前端 发布二手房 租房 商品 求租 求购等信息; 后台发布 新房,二手房租房 商品 写字楼 求租求购等房源信息; 功能完善的一块房产小程序 🌟 房产平台小程序的魅力…

第二证券:港交所上市24周年 市值增长38倍

香港交易及结算所有限公司(下称香港交易所)于近来举办庆典活动,庆祝上市24周年。 据介绍,自2000年起,香港交易所逐步发展成为全球领先的商场营运机构,也成为连接中国内地与国际商场的主要桥梁。到2024年6月…

Python处理消息队列库之kombu使用详解

概要 在现代应用程序开发中,消息队列是实现异步任务处理和微服务通信的重要组件。Kombu 是一个用于在 Python 中处理消息的库,它提供了一个统一的接口来访问不同的消息队列后端,如 RabbitMQ、Redis 等。Kombu 设计简洁、功能强大,使得开发者可以轻松地在应用中集成消息队列…

FPGA - DFT(离散傅里叶变换)—FFT(快速傅里叶变化)

一,DFT(离散傅里叶变换原理) 1,DFT(离散傅里叶变换原理)理论简介 在数字信号处理中有一个基本概念: 如果信号在频域是离散的,则该信号在时域就表现为周期性的时间函数;相反,如果信号在时域是离散的&#x…

Linux系统安装Lua语言及Lua外部库

安装Lua Lua语言是一种轻量级、高效且可扩展的脚本语言,具有简洁易学的语法和占用资源少的特点。它支持动态类型,提供了丰富的表达式和运算符,同时具备自动垃圾回收机制和跨平台性。Lua语言易于嵌入到其他应用程序中,并可与其他语…

Spring Boot基础入门

引言 Spring Boot是一个开源的Java框架,旨在简化Spring应用程序的创建和部署过程。它提供了一种快速和简便的方式来创建独立的、生产级别的基于Spring的应用程序。本文将介绍Spring Boot的基础知识,包括其核心特性、如何开始使用Spring Boot以及构建你的…

golang 实现继承方式

经常使用java或c同学应该比较了解纯面向对象,继承、接口、封装等特性,在go中并没有特别显示的表达出来,但是go隐含是支持的,只是支持的方式不一致,可以说go的方式更加灵活,go语言精髓是组合机制&#xff0c…

淘宝扭蛋机小程序:现在是否是最佳开发时机?

随着科技的飞速发展和移动互联网的普及,小程序作为一种新兴的互联网应用形态,已经深入到人们的日常生活中。淘宝扭蛋机小程序,作为结合了娱乐与电商的创新模式,近年来备受关注。那么,现在是否是开发淘宝扭蛋机小程序的…

为什么 Swift 没有原生的 subArray 方法?

为什么 Swift 没有原生的 subArray 方法? Swift 是一门设计精良的编程语言,以其灵活性和高性能著称。在 Swift 中截取数组的子数组是一个常见的操作,但你可能会发现 Swift 标准库中并没有直接提供一个 subArray 方法。这是为什么呢&#xff…

洗地机哪个牌子最好用?测评员总结4款高配置洗地机推荐

洗地机作为现代家居清洁的得力助手,它不仅能让我们在日常清扫中保持高效率和高便捷性,特别适合快节奏生活的都市家庭。面对市场上众多的洗地机品牌与型号,消费者往往面临选择难题,对于洗地机的综合考量需要太多时间,而…

Spring Boot整合Druid:轻松实现SQL监控和数据库密码加密

文章目录 1 引言1.1 简介1.2 Druid的功能1.3 竞品对比 2 准备工作2.1 项目环境 3 集成Druid3.1 添加依赖3.2 配置Druid3.3 编写测试类测试3.4 访问控制台3.5 测试SQL监控3.6 数据库密码加密3.6.1 执行命令加密数据库密码3.6.2 配置参数3.6.3 测试 4 总结 1 引言 1.1 简介 Dru…

​Python20 Numpy基础

NumPy(Numerical Python)是一个开源的Python库,广泛用于科学计算。它提供了一个高性能的多维数组对象,以及用于处理这些数组的工具和函数。NumPy是数据分析、机器学习、工程和科学研究中不可或缺的工具之一,因为它提供…

使用Hugging Face获取BERT预训练模型

【图书推荐】《从零开始大模型开发与微调:基于PyTorch与ChatGLM》_《从零开始大模型开发与微调:基于pytorch与chatglm》-CSDN博客 BERT是一个预训练模型,其基本架构和存档都有相应的服务公司提供下载服务,而Hugging Face是一家目前专门免费提…

推荐一款好用的编辑工具——onlyoffice桌面编辑器8.1

读者大大们好呀!!!☀️☀️☀️ 🔥 欢迎来到我的博客 👀期待大大的关注哦❗️❗️❗️ 🚀欢迎收看我的主页文章➡️寻至善的主页 文章目录 🔥前言🚀版本更新概览🚗文档编辑PDF编辑器…

搭建盲盒小程序的必要性

随着移动互联网的飞速发展,小程序作为一种新型的应用形态,已经深入人们的生活。而盲盒,作为一种独特的销售方式,因其神秘感和趣味性而备受年轻消费者的喜爱。当盲盒遇上小程序,便产生了一种全新的商业模式,…

Qt项目天气预报(5) - 根据JSON刷新天气信息+城市匹配

刷新当天天气 我们使用如下api接入,当然需要自己去 易客云天气API免费天气API接口|天气预报接口|全球天气API接口|气象预警|空气质量 (tianqiapi.com)注册后生成自己的对应id才可以使用 //专业天气v61 http://v1.yiketianqi.com/api?unescape1&versionv61&…

STM32学习-HAL库 串口通信

学完标准库之后,本来想学习freertos的,但是看了很多教程都是移植的HAL库程序,这里再学习一些HAL库的内容,有了基础这里直接学习主要的外设。 HAL库对于串口主要有两个结构体UART_InitTypeDef和UART_HandleTypeDef,前者…

白帽子的海外第一单,750刀

国际惯例,给兄弟们看图 这是我们师傅挖国外SRC的部分赏金截图 就问你!挖国外漏洞赚美金香不香! 现在国内SRC越来越卷了,越来越多的白帽子开始挖海外漏洞赚美金。海外SRC真的比国内赏金高很多,不说高危漏洞&#xff0…

MoneyPrinterPlus:AI自动短视频生成工具-腾讯云配置详解

MoneyPrinterPlus可以使用大模型自动生成短视频,其中的语音合成和语音识别部分需要借助于一些第三发云厂商的语音服务。 很多小伙伴可能不知道应该如何配置,这里给大家提供一个详细的腾讯云语音服务的配置教程。 项目已开源,代码地址&#…

计算几何系列——XCPC中计算几何一些题型杂谈(上)

本系列文章力求以简洁易懂的文字介绍计算几何中的基本概念,使读者快速入门,故不追求难度和深度,仅起到抛砖引玉的作用。 在XCPC中有一种题叫计算几何,这类题在大多数时候都作为一类金牌题甚至防AK题的难度出现,但是在…