也可以在文档中进行查询,文档链接
- 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