python学习之旅(os模块)

简介: python学习之旅(os模块)

也可以在文档中进行查询,文档链接

  • os库是 Python 的标准库之一,用于与操作系统进行交互。它提供了许多用于管理文件和目录、运行系统命令、环境变量管理、进程管理等功能。常用的函数有:os.system()、os.mkdir()、os.chdir()、os.getcwd()、os.rmdir()、os.remove()、os.listdir()等。
  • os是operation system(操作系统)的缩写;os模块就是python对操作系统操作接口的封装。os模块提供了多数操作系统的功能接口函数。(OS模块提供了与操作系统进行交互的函数)
  • 操作系统属于Python的标准实用程序模块。该模块提供了使用依赖于操作系统的函数的便携式方法。  复制成功,转载请保留本站链接: www.chenjiao.cloud


函数命令

打印帮助

In [74]: help(os)
Help on module os:
NAME
    os - OS routines for NT or Posix depending on what system we're on.
MODULE REFERENCE
   https://docs.python.org/3.9/library/os
    The following documentation is automatically generated from the Python
    source files.  It may be incomplete, incorrect or include features that
    are considered implementation detail and may vary between Python
    implementations.  When in doubt, consult the module reference at the
    location listed above.
DESCRIPTION
    This exports:
      - all functions from posix or nt, e.g. unlink, stat, etc.
      - os.path is either posixpath or ntpath
      - os.name is either 'posix' or 'nt'
      - os.curdir is a string representing the current directory (always '.')
      - os.pardir is a string representing the parent directory (always '..')
      - os.sep is the (or a most common) pathname separator ('/' or '\\')
      - os.extsep is the extension separator (always '.')
      - os.altsep is the alternate pathname separator (None or '/')
      - os.pathsep is the component separator used in $PATH etc
      - os.linesep is the line separator in text files ('\r' or '\n' or '\r\n')
      - os.defpath is the default search path for executables
      - os.devnull is the file path of the null device ('/dev/null', etc.)
    Programs that import and use 'os' stand a better chance of being
    portable between different platforms.  Of course, they must then
    only use functions that are defined by all platforms (e.g., unlink
    and opendir), and leave all pathname manipulation to os.path
    (e.g., split and join).
# python--函数 os.sep :主要用于系统路径中的分隔符
# Windows系统通过是“\\”,Linux类系统如Ubuntu的分隔符是“/”,而苹果Mac OS系统中是“:”
# 常用的os模块命令:
# 1、os.name——name顾名思义就是'名字',这里的名字是指操作系统的名字,主要作用是判断目前正在使用的平台,并给出操作系统的名字,如Windows 返回 'nt'; Linux 返回'posix'。注意该命令不带括号。
# 2、os.getcwd()——全称应该是'get current work directory',获取当前工作的目录
# 3、os.listdir(path)——列出path目录下所有的文件和目录名。Path参数可以省略。
# 4、os.remove(path)——删除path指定的文件,该参数不能省略。
# 5、os.rmdir(path)——删除path指定的目录,该参数不能省略。
# 6、os.mkdir(path)——创建path指定的目录,该参数不能省略。
# 7、os.unlink() 方法用于删除文件,如果文件是一个目录则返回一个错误
# os.remove()       #删除文件
# os.rename()       #重命名文件
# os.walk()       #生成目录树下的所有文件名
# os.chdir()       #改变目录
# os.mkdir/makedirs()     #创建目录/多层目录
# os.rmdir/removedirs     #删除目录/多层目录
# os.listdir()       #列出指定目录的文件
# os.getcwd()       #取得当前工作目录
# os.chmod()       #改变目录权限
# os.path.basename()     #去掉目录路径,返回文件名
# os.path.dirname()     #去掉文件名,返回目录路径
# os.path.join()      #将分离的各部分组合成一个路径名
# os.path.split()      #返回(dirname(),basename())元组
# os.path.splitext()     #返回filename,extension)元组
# os.path.getatime\ctime\mtime   #分别返回最近访问、创建、修改时间
# os.path.getsize()     #返回文件大小
# os.path.exists()      #是否存在
# os.path.isabs()      #是否为绝对路径
# os.path.isdir()      #是否为目录
# os.path.isfile()      #是否为文件
# os.system('command') 会执行括号中的命令,如果命令成功执行,这条语句返回0,否则返回1


具体例子

当前路径及路径下的文件

os.getcwd() 查看当前所在路径,具体到当前脚本的上一级

os.listdir(path) 列举path目录下的所有文件。返回的是列表类型。

In [1]: import os
In [2]: os.getcwd()
Out[2]: 'C:\\Users\\admin'
In [3]: os.listdir('C:\\Users\\admin\\pip')
Out[3]: ['pip.ini']
# 这里如果是直接填路径的话,Windows下需要两个斜杠(第一个斜杠为注释作用)


重命名

os.rename(old, new) 将文件或路径(文件夹)重命名,以及移动文件夹,只能重命名原路径 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.abspath(path) 返回当前文件位置的绝对路径。

In [5]: os.path.abspath('.')
Out[5]: 'C:\\Users\\admin'


查看指定文件路径的文件夹路径部分和文件名部分

os.path.split(path) 将指定文件的路径分解为(文件夹路径, 文件名),返回的数据类型是元组类型。

In [8]: os.path.split(os.getcwd())
Out[8]: ('C:\\Users', 'admin')
In [9]: os.path.split('C:\\Users\\admin')
Out[9]: ('C:\\Users', 'admin')
In [10]: os.path.split('C:\\Users\\admin\\')
Out[10]: ('C:\\Users\\admin', '')
# 以\结尾的话代表目录,因此文件部分为空
In [11]: os.path.split('moduler-OS')
Out[11]: ('', 'moduler-OS')
# 使用相对路径,没有\的情况下目录部分为空


路径拼接

os.path.join(path1, path2, ...) 将入参的path进行组合,若其中有绝对路径,则之前的path将被删除

In [12]: os.path.join('C:\\a', 'b', 'c')
Out[12]: 'C:\\a\\b\\c'
In [13]: os.path.join('C:\\a', 'b', 'D:\\c')
Out[13]: 'D:\\c'


获取路径的文件夹路径部分

os.path.dirname(path) 返回path中的文件夹路径部分,且路径结尾不包含'\'。【即返回文件的路径(此路径不包含文件名)】

In [14]: os.path.dirname('C:\\Users\\admin\\')
Out[14]: 'C:\\Users\\admin'
In [15]: os.path.dirname('C:\\Users\\admin\\1.py')
Out[15]: 'C:\\Users\\admin'


获取路径的文件名

os.path.basename(path) 返回path中的文件名

In [16]: os.path.basename('C:\\Users\\admin\\')
Out[16]: ''
In [17]: os.path.basename('C:\\Users\\admin\\1.py')
Out[17]: '1.py'


查看文件时间

os.path.getmtime(path) 返回文件或文件夹的最后修改时间,从新纪元到访问时的秒数。

os.path.getatime(path) 返回文件或文件夹的最后访问时间,从新纪元到访问时的秒数。

os.path.getctime(path) 返回文件或文件夹的创建时间,从新纪元到访问时的秒数。

In [20]: os.path.getmtime('moduler-OS.ipynb')
Out[20]: 1680448297.1789303
In [21]: import time
In [22]: time.ctime(1680448297.1789303)
Out[22]: 'Sun Apr  2 23:11:37 2023'    # 转换为本地时间
In [23]: os.path.getatime(os.getcwd())
Out[23]: 1680449914.8788157
In [24]: time.ctime(os.path.getatime(os.getcwd()))
Out[24]: 'Sun Apr  2 23:38:46 2023'
In [25]: os.path.getctime('moduler-OS.ipynb')
Out[25]: 1680447349.5647955
In [26]: time.ctime(os.path.getctime('moduler-OS.ipynb'))
Out[26]: 'Sun Apr  2 22:55:49 2023'


查看文件大小

os.path.getsize(path) 返回文件的大小(单位是字节);若path入参值是一个文件夹路径则返回0。

In [27]: os.path.getsize('D:\\ISO')
Out[27]: 0
In [28]: os.path.getsize('D:\\ISO\\CentOS-7-x86_64-DVD-1908.iso')
Out[28]: 4664066048


查看文件是否存在

os.path.exists(path) 判断文件或者文件夹是否存在,返回True 或 False。【文件或文件夹的名字不区分大小写】

In [31]: os.path.exists('D:\\ISO\\CentOS-7-x86_64-DVD-1908.iso')
Out[31]: True
In [32]: os.path.exists('D:\\ISO\\CentOS-7-x86_64-DVD-1908')
Out[32]: False


os模块中操作目录以及文件的函数

os.mkdir('文件夹名') 新建文件夹;入参为目录路径,不可为文件路径;(父目录必须存在的情况下创建下一级文件夹)


os.rmdir('文件夹名') 删除文件夹;入参为目录路径,不可为文件路径


os.remove('文件路径') 删除文件;入参为文件路径,不可为目录路径


os.makedirs('路径及文件') 递归新建文件夹;可以连续创建该文件夹的多级目录


os.path.isdir('路径') 判断入参路径是否为文件夹,返回值为布尔值;是文件夹返回True,不是文件夹返回False


os.path.isfile('路径') 判断入参路径是否为文件,返回值为布尔值;是文件返回True,不是文件返回False

In [39]: os.listdir('D:\\ISO\\')
Out[39]: ['1.txt', 'CentOS-7-x86_64-DVD-1908.iso']
In [40]: os.mkdir('d:\\ISO\\test')
In [41]: os.listdir('D:\\ISO\\')
Out[41]: ['1.txt', 'CentOS-7-x86_64-DVD-1908.iso', 'test']
In [42]: os.rmdir('D:\\ISO\\test')
In [43]: os.listdir('D:\\ISO\\')
Out[43]: ['1.txt', 'CentOS-7-x86_64-DVD-1908.iso']
In [44]: os.remove('D:\\ISO\\1.txt')
In [45]: os.listdir('D:\\ISO\\')
Out[45]: ['CentOS-7-x86_64-DVD-1908.iso']
In [46]: os.makedirs('D:\\ISO\\test1\\test2\\test3')
In [47]: os.listdir('D:\\ISO\\')
Out[47]: ['CentOS-7-x86_64-DVD-1908.iso', 'test1']
In [52]: os.path.isdir('D:\\ISO\\test1')
Out[52]: True
In [53]: os.path.isdir('D:\\ISO\\CentOS-7-x86_64-DVD-1908.iso')
Out[53]: False
In [54]: os.path.isfile('D:\\ISO\\CentOS-7-x86_64-DVD-1908.iso')
Out[54]: True


os.removedirs() 递归删除目录,会删除至非空路径

In [71]: os.removedirs('D:\\ISO\\test1\\test2\\test3')
In [72]: os.listdir('D:\\ISO\\')
Out[72]: ['CentOS-7-x86_64-DVD-1908.iso']


os模块中遍历目录数

一个遍历目录数的函数,它以一种深度优先的策略(depth-first)访问指定的目录。

os.walk(top=path,topdown=True,oneerror=None)


参数 top 表示需要遍历的目录树的路径。


参数 topdown 默认为 True ,表示首先返回根目录树下的文件,然后,再遍历目录树的子目录。 当topdown 的值为 False 时,则表示先遍历目录树的子目录,返回子目录下的文件,最后返回根目录下的文件。


参数 oneerror 的默认值为 None ,表示忽略文件遍历时产生的错误;如果不为空,则提供一个自定义函数提示错误信息,后边遍历抛出异常。


os.walk() 函数的返回值是一个生成器(generator),每次遍历的对象都是返回的是一个三元组 (root,dirs,files):该元组有3个元素,这3个元素分别表示每次遍历的路径名,目录列表和文件列表。


root 代表当前遍历的目录路径,string类型。


dirs 代表root路径下的所有子目录名称;list类型,列表中的每个元素是string类型,代表子目录名称。


files 代表root路径下的所有子文件名称;list类型,列表中的每个元素是string类型,代表子文件名称。

In [57]: os.walk('D:\\ISO',True,None)
Out[57]: <generator object _walk at 0x000001A78BF69120>
# 直接看是一个对象
In [58]: os.walk('D:\\ISO')
Out[58]: <generator object _walk at 0x000001A78C264F90>
In [59]: for path, dirname, filename in os.walk('D:\\ISO'):
    ...:     print(path, dirname, filename)
    ...:
D:\ISO ['test1'] ['CentOS-7-x86_64-DVD-1908.iso']
D:\ISO\test1 ['test2'] []
D:\ISO\test1\test2 ['test3'] []
D:\ISO\test1\test2\test3 [] []
# 注意:上面的列表为空就代表当前遍历的root目录下没有子目录或者没有子文件。


与os.listdir()区别

os.listdir只能看到当前目录下的文件夹与文件,os.walk可以递归看到所有(可以参考linxu下的tree),但是需要用for去解开


获取在进程的控制终端上登录的用户的名称

os.getlogin() (即此时pc登录的用户名)


类似于linux下的whoami命令

In [60]: os.getlogin()
Out[60]: 'admin'
[admint@rocky2 ~]$ whoami
admin


目录
相关文章
|
3天前
|
消息中间件 监控 网络协议
Python中的Socket魔法:如何利用socket模块构建强大的网络通信
本文介绍了Python的`socket`模块,讲解了其基本概念、语法和使用方法。通过简单的TCP服务器和客户端示例,展示了如何创建、绑定、监听、接受连接及发送/接收数据。进一步探讨了多用户聊天室的实现,并介绍了非阻塞IO和多路复用技术以提高并发处理能力。最后,讨论了`socket`模块在现代网络编程中的应用及其与其他通信方式的关系。
|
5天前
|
机器学习/深度学习 人工智能 架构师
Python学习圣经:从0到1,精通Python使用
尼恩架构团队的大模型《LLM大模型学习圣经》是一个系统化的学习系列,初步规划包括以下内容: 1. **《Python学习圣经:从0到1精通Python,打好AI基础》** 2. **《LLM大模型学习圣经:从0到1吃透Transformer技术底座》**
Python学习圣经:从0到1,精通Python使用
|
6天前
|
Python
Python 中常用的内置模块之`re`模块
【10月更文挑战第11天】 `re` 模块是 Python 内置的正则表达式处理工具,支持模式匹配、搜索、替换等功能。通过 `search`、`match`、`findall` 和 `sub` 等函数,结合正则表达式的元字符、分组、贪婪模式等特性,可高效完成文本处理任务。示例代码展示了基本用法,帮助快速上手。
9 1
|
6天前
|
JSON 数据格式 Python
Python基础-常用内置模块
【10月更文挑战第11天】 Python 内置模块丰富,涵盖系统交互、时间处理、数学运算、正则表达式、数据序列化等功能,如 `sys`、`os`、`time`、`datetime`、`random`、`math`、`re`、`json`、`pickle` 和 `csv` 等,极大提升了开发效率和代码质量。
8 1
|
8天前
|
机器学习/深度学习 缓存 PyTorch
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
这篇文章是关于如何下载、安装和配置Miniconda,以及如何使用Miniconda创建和管理Python环境的详细指南。
130 0
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
|
5天前
|
机器学习/深度学习 人工智能 架构师
Python学习圣经:从入门到精通Python,打好 LLM大模型的基础
Python学习圣经:从0到1精通Python,打好AI基础
|
7天前
|
机器学习/深度学习 缓存 Linux
python环境学习:pip介绍,pip 和 conda的区别和联系。哪个更好使用?pip创建虚拟环境并解释venv模块,pip的常用命令,conda的常用命令。
本文介绍了Python的包管理工具pip和环境管理器conda的区别与联系。pip主要用于安装和管理Python包,而conda不仅管理Python包,还能管理其他语言的包,并提供强大的环境管理功能。文章还讨论了pip创建虚拟环境的方法,以及pip和conda的常用命令。作者推荐使用conda安装科学计算和数据分析包,而pip则用于安装无法通过conda获取的包。
24 0
|
10天前
|
Unix 物联网 大数据
操作系统的演化与比较:从Unix到Linux
本文将探讨操作系统的历史发展,重点关注Unix和Linux两个主要的操作系统分支。通过分析它们的起源、设计哲学、技术特点以及在现代计算中的影响,我们可以更好地理解操作系统在计算机科学中的核心地位及其未来发展趋势。
|
3月前
|
安全 Linux 网络安全
部署07--远程连接Linux系统,利用FinalShell可以远程连接到我们的操作系统上
部署07--远程连接Linux系统,利用FinalShell可以远程连接到我们的操作系统上
|
2月前
|
编解码 安全 Linux
基于arm64架构国产操作系统|Linux下的RTMP|RTSP低延时直播播放器开发探究
这段内容讲述了国产操作系统背景下,大牛直播SDK针对国产操作系统与Linux平台发布的RTMP/RTSP直播播放SDK。此SDK支持arm64架构,基于X协议输出视频,采用PulseAudio和Alsa Lib处理音频,具备实时静音、快照、缓冲时间设定等功能,并支持H.265编码格式。此外,提供了示例代码展示如何实现多实例播放器的创建与管理,包括窗口布局调整、事件监听、视频分辨率变化和实时快照回调等关键功能。这一技术实现有助于提高直播服务的稳定性和响应速度,适应国产操作系统在各行业中的应用需求。