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


目录
相关文章
|
1月前
|
机器学习/深度学习 Python
堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能
本文深入探讨了堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能。文章详细介绍了堆叠的实现步骤,包括数据准备、基础模型训练、新训练集构建及元学习器训练,并讨论了其优缺点。
53 3
|
13天前
|
Python
Python Internet 模块
Python Internet 模块。
108 74
|
12天前
|
Python 容器
Python学习的自我理解和想法(9)
这是我在B站跟随千锋教育学习Python的第9天,主要学习了赋值、浅拷贝和深拷贝的概念及其底层逻辑。由于开学时间紧张,内容较为简略,但希望能帮助理解这些重要概念。赋值是创建引用,浅拷贝创建新容器但元素仍引用原对象,深拷贝则创建完全独立的新对象。希望对大家有所帮助,欢迎讨论。
|
1月前
|
算法 数据安全/隐私保护 开发者
马特赛特旋转算法:Python的随机模块背后的力量
马特赛特旋转算法是Python `random`模块的核心,由松本真和西村拓士于1997年提出。它基于线性反馈移位寄存器,具有超长周期和高维均匀性,适用于模拟、密码学等领域。Python中通过设置种子值初始化状态数组,经状态更新和输出提取生成随机数,代码简单高效。
109 63
|
3天前
|
Python
Python学习的自我理解和想法(10)
这是我在千锋教育B站课程学习Python的第10天笔记,主要学习了函数的相关知识。内容包括函数的定义、组成、命名、参数分类(必须参数、关键字参数、默认参数、不定长参数)及调用注意事项。由于开学时间有限,记录较为简略,望谅解。通过学习,我理解了函数可以封装常用功能,简化代码并便于维护。若有不当之处,欢迎指正。
|
1月前
|
持续交付 Python
如何在Python中自动解决模块和包的依赖冲突?
完全自动解决所有依赖冲突可能并不总是可行,特别是在复杂的项目中。有时候仍然需要人工干预和判断。自动解决的方法主要是提供辅助和便捷,但不能完全替代人工的分析和决策😉。
|
14天前
|
存储 索引 Python
Python学习的自我理解和想法(6)
这是我在B站千锋教育学习Python的第6天笔记,主要学习了字典的使用方法,包括字典的基本概念、访问、修改、添加、删除元素,以及获取字典信息、遍历字典和合并字典等内容。开学后时间有限,内容较为简略,敬请谅解。
|
18天前
|
存储 程序员 Python
Python学习的自我理解和想法(2)
今日学习Python第二天,重点掌握字符串操作。内容涵盖字符串介绍、切片、长度统计、子串计数、大小写转换及查找位置等。通过B站黑马程序员课程跟随老师实践,非原创代码,旨在巩固基础知识与技能。
|
17天前
|
程序员 Python
Python学习的自我理解和想法(3)
这是学习Python第三天的内容总结,主要围绕字符串操作展开,包括字符串的提取、分割、合并、替换、判断、编码及格式化输出等,通过B站黑马程序员课程跟随老师实践,非原创代码。
|
14天前
|
Python
Python学习的自我理解和想法(7)
学的是b站的课程(千锋教育),跟老师写程序,不是自创的代码! 今天是学Python的第七天,学的内容是集合。开学了,时间不多,写得不多,见谅。