Python必知必会 os 模块详解

news2024/11/26 5:54:39

文章目录

  • Python os 模块
    • os模块的常用操作
    • os.path模块
    • os.open()模块

  • ❤️ 作者简介:大家好我是小鱼干儿♛是一个热爱编程、热爱算法的大三学生,蓝桥杯国赛二等奖获得者
  • 🐟 个人主页 :https://blog.csdn.net/qq_52007481
  • 个人社区:【小鱼干爱编程】
  • 🔥 算法专栏:算法竞赛进阶指南
  • 💯 刷题网站:市面上的刷题网站有很多如何选择一个适合自己的网站呢,博主给这里推荐一款我常用的刷题网站 👉点击跳转

Python os 模块

os是“operating system”的缩写,os模块提供各种 Python 程序与操作系统进行交互的接口,使用os模块,一方面可以方便地与操作系统进行交互,另一方面页可以极大增强代码的可移植性

注意 一定要使用 import os 而不是 from os import * 。这将避免内建的 open() 函数被 os.open() 隐式替换掉,因为它们的使用方式大不相同。

os模块的常用操作

import os
  • os.getcwd() 获取当前工作路径
os.getcwd()
  • os.chdir() 切换工作路径
# 将工作目录切换到'D:/Pycharm'
os.chdir('D:/Pycharm')  
print(os.getcwd()) #D:\Pycharm
  • os.environ 获取所有的环境变量,
os.environ
  • os.getlogin()返回通过控制终端进程进行登录的用户名
os.getlogin()
  • os.name 返回python运行的环境系统
os.name

'''
返回值的意思
posix  Linux 和 Mac OS
nt  Windows
java  Java 虚拟机环境
''' 
  • os.mkdir 创建一个新的文件价夹,不能创建多级的文件夹
    当文件夹已经存在时会报错FileExistsError
    创建多级的文件夹会报错FileNotFoundError
# 在当前目录下创建一个名为test的文件夹
os.mkdir('test')

# 报错内容
# FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: 'test'
  • os.makedirs() 创建多级目录
# 创建a文件夹,并且在a文件夹下创建b文件夹
os.makedirs('a/b')
  • os.rmdir() 删除空文件夹
    如果如果删除的文件夹非空OSError: [WinError 145] 目录不是空的。'filename'
# 删除文件夹a
os.rmdir('a') 
  • os.removedirs() 递归删除目录。
    工作方式类似于 rmdir(),不同之处在于,如果成功删除了末尾一级目录,removedirs() 会尝试依次删除 path 中提到的每个父目录,直到抛出错误为止(但该错误会被忽略,因为这通常表示父目录不是空目录)
# 删除文件夹 文件夹 a及子文件夹b
os.removedirs('a/b')
  • os.remove() 删除文件
# 删除文件a.txt
os.remove('a.txt')
  • os.rename(src, dst) 将文件或路径(文件夹)重命名,以及移动文件夹
    src 原路径,dst修改后的命名
    只能重命名原路径 src 最后的路径或文件的名字,中间路径都必须要存在,否则就会抛出FileNotFoundError
# 将文件名b修改成文件名c
os.rename('a/b','a/c')

# 文件目录:  a/c c文件夹是a文件夹的子文件夹
# 将文件c移动到和a同级目录下
os.rename('a/c','c')

# 文件目录:  a/c c文件夹是a文件夹的子文件夹 
# 将文件c移动到和a同级目录下并改名为'newname'
os.rename('a/c','newname')

# 文件目录: a/c/w.txt
# 将文件w.txt修改成ww.txr
os.rename('a/c/w.txt','a/c/ww.txt')
# 同样也可以移动文件并重名的方式一样,用法和移动文件并重名的方式一样
  • os.renames(old, new)递归重命名目录或文件。
  • 工作方式类似 rename(),除了会首先创建新路径所需的中间目录。重命名后,将调用 removedirs() 删除旧路径中不需要的目录。
# 重命名可以重命名中间路径(实际上是,先新建新的目录,然后判断原目录是否可以删除,如果可以删除,就删除)
os.renames('a/b/a.txt','a/c/aaa.txt')

os.path模块

os.path中的函数基本上是纯粹的字符串操作。换句话说,传入该模块函数的参数甚至不需要是一个有效路径,该模块也不会试图访问这个路径,而仅仅是按照“路径”的通用格式对字符串进行处理

  • os.path 获取当前环境的路径
os.path
  • os.path.abspath(path) 返回路径 path 的绝对路径
# 根据相对路径返回绝对路径
print(os.path.abspath('a/c/aaa.txt'))
  • os.path.exists(path) 判断该路径或文件是否存在
    path:路径
    返回布尔值,True,False
# 检查文件是否存在
print(os.path.exists('a/c'))
# 检查aaa.txt文件是否存在
print(os.path.exists('a/c/aaa.txt'))
  • os.path.getatime(path)返回path的最后访问时间,返回的时间为秒(时间戳),可以利用tiem转换成常用的时间格式
# 返回文件a最后的访问时间
print(os.path.getatime('a'))

t = os.path.getatime('a')  # 获取时间戳
tupTime = time.localtime(t)  # 将时间戳转换成本地时间
stadardTime = time.strftime("%Y-%m-%d %H:%M:%S", tupTime)  # 转换成对应的时间格式
print(stadardTime) # 2022-09-18 11:44:28
  • os.path.getctime(path) 在windos下获取文件的创建时间,在Unix返回的是最后的修改时间
# 获取aaa.txt文件的创建时间(windows)
t = os.path.getctime('a/c/aaa.txt')
  • os.path.getsize(path) 获取文件的大小
# 获取文件aaa.txt的大小
os.path.getsize('a/c/aaa.txt')
  • os.path.split() 将路径 path 拆分为一对,即 (head, tail),其中,tail 是路径的最后一部分,而 head 里是除最后部分外的所有内容。tail 部分不会包含斜杠,如果 path 以斜杠结尾,则 tail 将为空。如果 path 中没有斜杠,head 将为空。如果 path 为空,则 head 和 tail 均为空。
    返回的部分是一个元组里面由两个元素
a = os.path.split('D:/aa/bb')
print(type(a))  # <class 'tuple'>
print(a)       #  ('D:/aa', 'bb')  头部和尾部

# 当最后为’/‘时
a = os.path.split('D:/aa/bb/')
print(a)     # ('D:/aa/bb', '')  尾部为空
# 当路径path中没有路径的时候 
a = os.path.split('aa')
print(a)  # ('', 'aa')  # 头部为空
 
# 当传入的路径为空时
a = os.path.split( '')
print(a)  # ('', '')  # 头部和尾部均为空
  • os.path.isfile() 判断传入的文件是否存在 返回布尔值
# 判断文件是否存在
os.path.isfile('a/c/aaa.txt')
  • os.path.isdir() # 判断文件路径是否存在 返回布尔值
# 判断路径a/c是否存在
os.path.isdir('a/c')

os.open()模块

  • os.open() 打开文件的一系列操作
    用法和基本的open函数很类似

注解 本函数适用于底层的 I/O。常规用途请使用内置函数 open(),该函数的 read() 和 write() 方法(及其他方法)会返回 文件对象。要将文件描述符包装在文件对象中,请使用 fdopen()。

os.open(file, flags[, mode])
'''
file 文件名
flags  模式
mode 可选参数, mode 设置其权限状态
'''
  • flags – 该参数可以是以下选项,多个使用 “|” 隔开:
    • os.O_RDONLY: 以只读的方式打开
    • os.O_WRONLY: 以只写的方式打开
    • os.O_RDWR : 以读写的方式打开
    • os.O_NONBLOCK: 打开时不阻塞
    • os.O_APPEND: 以追加的方式打开
    • os.O_CREAT: 创建并打开一个新文件
    • os.O_TRUNC: 打开一个文件并截断它的长度为零(必须有写权限)
    • os.O_EXCL: 如果指定的文件存在,返回错误
    • os.O_SHLOCK: 自动获取共享锁
    • os.O_EXLOCK: 自动获取独立锁
    • os.O_DIRECT: 消除或减少缓存效果
    • os.O_FSYNC : 同步写入
    • os.O_NOFOLLOW: 不追踪软链接

在写入文件时不能直接写入字符串否则会报错TypeError: a bytes-like object is required, not 'str'

# 打开文件
fd = os.open("foo.txt", os.O_RDWR|os.O_CREAT )  # 模式可以并存中间用 | 隔开
# 写入字符串
a = b"This is test"   
os.write(fd,a)
# 关闭文件
os.close(fd)

print("关闭文件成功!!")

最后的补充

最后如果忘记了os的用法可以使用内置的 dir() help() 函数来查看函数的用法
dir() 返回一个列表包括 os模块的所有函数名

print(dir(os))

help() 返回所有os模块的所有内容

print(help(os))

这样的结果看着确实有点不太人性化
在这里插入图片描述
使用help函数查看具体的函数使用方法

print(help(os.getcwd))
print(help('os.getcwd'))   # 使用字符串也可以

返回函数的作用
在这里插入图片描述

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

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

相关文章

【嵌入式开发学习】__如何将BootLoader与APP合并成一个固件

目录 一、前言 二、传统方式 三、高效方式 1. 合并文件 2. bin转hex srec_cat工具 3. 完整示例 4. 举一反三 (*&#xffe3;︶&#xffe3;)创作不易&#xff01;期待你们的 点赞、收藏和评论喔。 一、前言 嵌入式固件一般分为 BootLoader 和 App&#xff0c;BootLo…

在Windows 10上安装单机版的Spark

一、Spark是什么 Spark是一种通用的大数据计算框架,是基于RDD(弹性分布式数据集)的一种计算模型。是专门为大数据处理而设计的通用的计算引擎。 二、Spark需要运行的环境 Spark需要scala作为运行环境 三、下载scala&#xff0c;并且配置环境变量 Scala官网:Install | The S…

C/C++大写字母的判断 2021年6月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C大写字母的判断 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C大写字母的判断 2021年6月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 输入一个字符&#xff0c;判断是否是英文大…

开源之夏经验分享|Dragonfly 社区 李从旺:社区贡献也是一种影响力

今天&#xff0c;我们邀请到了开源之夏 2023 活动 Dragonfly 社区的中选学生李从旺同学&#xff0c;他此次承担的项目是——「PyTorch Serve 基于 Dragonfly P2P 技术分发模型」。希望通过他的开源故事&#xff0c;能让更多人了解到开源的魅力&#xff0c;也可以从不同的视角去…

《视觉SLAM十四讲》-- 相机与图像

04 相机与图像 4.1 相机模型 4.1.1 针孔相机模型 针孔模型描述了一束光线通过针孔后&#xff0c;在针孔背面投影成像的关系&#xff08;类似小孔成像原理&#xff09;。 根据相似三角关系 Z f − X X ′ − Y Y ′ (3-1) \frac{Z}{f}-\frac{X}{X^{\prime}}-\frac{Y}{Y^{\p…

[架构之路-246]:目标系统 - 设计方法 - 软件工程 - 需求工程- 需求开发:获取、分析、定义、验证

目录 前言&#xff1a; 架构师为什么需要了解需求分析 一、需求工程概述 1.1 概述 1.2 需求工程的两大部分 &#xff08;1&#xff09;需求开发&#xff1a;系统工程师的职责、目标系统开发角度 &#xff08;2&#xff09;需求管理&#xff1a;项目管理者的职责、项目管…

Azure - 机器学习:使用自动化机器学习训练计算机视觉模型的数据架构

目录 一、用于训练的数据架构图像分类&#xff08;二进制/多类&#xff09;多标签图像分类对象检测实例分段 二、用于推理的数据格式输入格式输出格式图像分类多标签图像分类对象检测实例分段 了解如何设置Azure中 JSONL 文件格式&#xff0c;以便在训练和推理期间在计算机视觉…

Kotlin文件和类为什么不是一对一关系

在Java中&#xff0c;一个类文件的public类名必须和文件名一致&#xff0c;如何不一致就会报异常&#xff0c;但是在kotlin的文件可以和类名一致&#xff0c;也可以不一致。这种特性&#xff0c;就跟c有点像&#xff0c;毕竟c的.h 和 .cpp文件是分开的。只要最终编译的时候对的…

工业相机基本知识理解:工业相机IO接口,功耗和供电方式

I-input 相机接收外部信号&#xff0c;可用于触发相机&#xff08;硬触发&#xff09;&#xff0c;也可用于定制不同的 功能&#xff0c;例如使用不同信号宽度来改变相机的曝光时间。主要用于现场设 备控制相机使用&#xff0c;常常配合各种传感器使用 O-output 相机输出信号&a…

MS1112,一款16-bit 多输入内置基准模数转换器

MS1112 是一款高精度 16bit 模数转换器&#xff0c;具有 2 组差分输入 或 3 组单端输入通道&#xff0c;高达 16bits 的分辨率。内部集成 2.048V 基 准源&#xff0c;差分输入范围达到 2.048V 。 MS1112 使用了 I 2 C 兼容接口&#xff0c; 并有 2 个地址管…

【Java 进阶篇】JSTL 详解

Java JSTL&#xff08;JavaServer Pages Standard Tag Library&#xff09;是用于简化在 JSP 页面上的开发工作的 Java 标签库。它提供了在 JSP 页面上使用的标准标签&#xff0c;可以帮助开发人员更轻松地访问和操作数据&#xff0c;而无需编写大量的 Java 代码。Java JSTL 是…

ros1 自定义topic 主题的发布,监听以及和消息体的定义

1. 在功能包下新增msg 文件夹 在功能包的下面新建 msg 文件夹&#xff0c;如下图所示 2. 新增Person.msg 消息实体 右键打开命令框&#xff0c;输入 touch Person.msg 就会在msg 目录下新增 Person.msg 文件 在Person.msg中输入如下内容完成.msg文件的创建&#xff0c;msg文…

【Leetcode】【每日一题】【简单】2609. 最长平衡子字符串

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能&#xff0c;轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/find-the-longest-balanced-subs…

【Java】基于SpringBoot创建Web页面并热更新

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍基于SpringBoot创建Web页面并热更新。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下…

在微信小程序中怎么实现报名功能

在当今数字化时代&#xff0c;微信小程序已经成为各行各业进行营销和客户管理的必备工具。其中&#xff0c;报名功能作为微信小程序的一个重要应用场景&#xff0c;为企业或组织提供了方便、高效、实时的数据收集与管理方式。本文将为你详细介绍如何在微信小程序中实现报名功能…

shm4mn.dll没有被指定

每次打开excel&#xff0c;都会弹出提示“shm4mn.dll没有被指定” 网上各种方法都试了一次&#xff0c;没效果 解决方案&#xff1a; 直接在设置中删除所有添加的打印机

基于斑马算法的无人机航迹规划-附代码

基于斑马算法的无人机航迹规划 文章目录 基于斑马算法的无人机航迹规划1.斑马搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用斑马算法来优化无人机航迹规划。 1.斑马搜索算法 …

查看apk签名

cmd 命令&#xff1a; keytool -v -list -keystore "E:\xxx\release.jks"

01MyBatisPlus入门案例,常见注解,常用配置

一、入门案例 需求&#xff1a;基于课前资料提供的项目&#xff0c;实现下列功能&#xff1a; 新增用户功能根据id查询用户根据id批量查询用户根据id更新用户根据id删除用户 1.引入MybatisPlus的起步依赖 MybatisPlus官方提供的starter&#xff0c;其中集成了Mybatis和Myba…

Navicat16连接不上mysql

博主是因为服务里MySQL没启动&#xff0c; 如果确定自己的数据库正确无误的朋友就可以退出寻找其它解决办法了。 如图&#xff0c;一打开navicat就初始化&#xff0c;啥都没有&#xff0c;也连接不上 1&#xff0c;搜索里搜【服务】找到MySQL&#xff0c; 发现MySQL未启动。点击…