os
该模块提供了一种使用与操作系统相关的功能的便捷式途径
方法名 | 作用 |
---|---|
os.makedirs(‘dirname1/dirname2’) | 可生成多层递归目录 |
os.removedirs(‘dirname1’) | 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 |
os.mkdir(‘dirname’) | 生成单级目录;相当于shell中mkdir dirname |
os.rmdir(‘dirname’) | 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname |
os.listdir(‘dirname’) | 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 |
os.remove() | 删除一个文件 |
os.rename(“oldname”,“newname”) | 重命名文件/目录 |
os.stat(‘path/filename’) | 获取文件/目录信息 |
os.system(“bash command”) | 运行shell命令,直接显示 |
os.popen("bash command).read() | 运行shell命令,获取执行结果 |
os.getcwd() | 获取当前工作目录,即当前python脚本工作的目录路径 |
os.chdir(“dirname”) | 改变当前脚本工作目录;相当于shell下cd |
os.name
获取当前运行所在的环境,也就是是导入的操作系统相关模块的名称,有 posix,nt,java 三种。
Linux 和 Mac OS 均会返回 posix
nt全称应为“Microsoft Windows NT”,大体可以等同于 Windows 操作系统,
java则是 Java 虚拟机环境下的返回值。
os.mkdir() —生成单层文件夹
语法结构
mkdir(path, mode=511, *, dir_fd=None)
代码示例
import os
res = os.mkdir(r'OS_a')
这里用的是相对路径,会新建一个名为 Os_a 的文件夹。
但是 mkdir() 不能生成多级文件夹,也就是 'OS_a\Os_b' 结构
os.makedirs —生成多层文件夹
功能与 mkdir() 类似,但是 makedirs 可以创建单个文件夹也可以创建多个文件夹
语法结构
makedirs(name, mode=511, exist_ok=False)
代码示例一(创建单层文件夹):
import os
res = os.makedirs(r'OS_a')
代码示例二(创建多层文件夹):
import os
res = os.makedirs(r'OS_a\Os_b\Os_c')
os.rmdir() —删除空单层文件夹
根据路径删除文件夹,如果文件夹不存在或不为空,则会分别抛出 FileNotFoundError 或 OSError 异常。也就是说删除的是空的单层文件夹
语法结构
rmdir(path, *, dir_fd=None)
代码示例
import os
res = os.rmdir(r'OS_a\Os_b\Os_c')
基于文件的相对路径删除了文件 Os_c
os.removedirs() —删除空多层文件夹
递归删除,删除方式类似于 rmdir(),不同之处在于,如果成功删除了末尾一级目录,removedirs() 会尝试依次删除 path 中提到的每个父目录,直到抛出错误为止(但该错误会被忽略,因为这通常表示父目录不是空目录)
代码示例
import os
res = os.removedirs(r'OS_a\Os_b\Os_c')
根据相对路径,删除了最后的 Os_c 文件夹,删除成功的话会继续删除 Os_c 上一级的文件夹,若也为空则
继续删除,直到不为空。
os.listdir() —查看指定路径中的内容
返回一个包含由 path 指定目录中条目名称组成的列表。 该列表按任意顺序排列
代码示例
import os
res = os.listdir(r'C:\Users\ushop')
print(res)
会生成一个列表,里面的元素是所有的文件夹以及文件名称。
os.remove() —移除单个文件
根据路径删除文件。 如果该路径表示的是文件夹,则会引发异常。 要用 rmdir() 来删除文件夹。
代码示例
import os
os.remove(r'a.txt')
删除相对路径名为 a.txt 的文件
os.rename() —给文件重命名
语法结构
os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
将文件或目录 src 重命名为 dst。如果 dst 已存在,则会操作失败并抛出异常。
代码示例
import os
os.rename(r'a.txt', r'b.txt')
os.getcwd() —返回当前路径
返回表示当前工作目录的字符串
代码示例
import os
res = os.getcwd()
print(res)
打印当前文件的路径
os.getcwdb()
os.getcwdb() 返回当前路径的字节串
os.chdir() —切换路径
切换的当前工作目录
代码示例
import os
os.chdir(r'OS_a')
res = os.getcwd()
print(res)
打印修改后的路径
os.path
该模块在路径名上实现了一些有用的功能
方法名 | 作用 |
---|---|
os.path.abspath(path) | 返回path规范化的绝对路径 |
os.path.split(path) | 将path分割成目录和文件名二元组返回 |
os.path.dirname(path) | 返回path的目录。其实就是os.path.split(path)的第一个元素 |
os.path.basename(path) | 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素 |
os.path.exists(path) | 如果path存在,返回True;如果path不存在,返回False |
os.path.isabs(path) | 如果path是绝对路径,返回True |
os.path.isfile(path) | 如果path是一个存在的文件,返回True。否则返回False |
os.path.isdir(path) | 如果path是一个存在的目录,则返回True。否则返回False |
os.path.join(path, *paths) | 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 |
os.path.getatime(path) | 返回path所指向的文件或者目录的最后访问时间 |
os.path.getmtime(path) | 返回path所指向的文件或者目录的最后修改时间 |
os.path.getsize(path) | 返回path的大小 |
os.path.split(path) —将路径拆分
将路径 path 拆分为一对,即 (head, tail),其中,tail 是路径的最后一部分,而 head 里是除最后部
分外的所有内容。
'''
tail 部分不会包含斜杠
如果 path 中没有斜杠,head 将为空。
'''
语法格式
os.path.split(path)
代码示例一
import os
res = os.path.split(r'F:\python project\re_test\re_a.py')
print(res)
打印结果
('F:\\python project\\re_test', 're_a.py')
最后一个斜杠后为 tail 部分。
代码示例二
import os
res = os.path.split(r're_a.py')
print(res)
打印结果
('', 're_a.py')
在没有斜杠的时候,head 部分为空。
os.path.dirname() —返回给定地址所在目录
可以理解为将 path 传入函数 split() 之后,返回的一对值中的第一个元素。
代码示例
import os
res = os.path.dirname(r'F:\python project\re_test\re_a.py')
print(res)
打印结果
F:\python project\re_test
和 os.path.split() 的结果中第一个值相同。
—动态获取绝对路径—
使用 os.path.dirname(__file__) 可以动态获取当前执行文件的绝对路径。
代码示例一(获取当前执行文件的绝对路径)
import os
res = os.path.dirname(__file__)
print(res)
打印结果
F:\python project\re_test
将 __file__ 放在 dirname() 中,此时获取的是'当前执行文件的绝对路径',而且在任意文件、任意电脑
都能得到该文件的绝对路径。
代码示例二(获取当前执行文件上层的绝对路径)
import os
res = os.path.dirname(os.path.dirname(__file__))
print(res)
打印结果
F:\python project
采用嵌套的方式获得的是当前执行文件的上一层绝对路径。
前面说 os.path.dirname()方法的值就是 os.path.split() 切分后的第一个值,若此时 dirname 括号
里是嵌套 dirname(__file__),也就相当于将当前文件切分取第一个值,也就是上层绝对路径。
os.path.basename()
可以理解为 os.path.split() 切分后的第二个值
代码示例
import os
res = os.path.basename(__file__)
res1 = os.path.basename(r'F:\python project\re_test\re_a.py')
print(res)
print(res1)
打印结果
re_a.py
re_a.py
也支持 __file__
os.path.abspath() —返回执行文件自身绝对路径
os.path.abspath(path) 和 os.path.dirname(path) 返回的唯一不同就是 abspath() 返回的路径包含了执行文件自身。
代码示例
import os
res = os.path.abspath(__file__)
res1 = os.path.abspath(r'F:\python project\re_test\re_a.py')
print(res)
print(res1)
打印结果
F:\python project\re_test\re_a.py
F:\python project\re_test\re_a.py
同样的 os.path.abspath() 也支持动态获取执行文件的绝对路径(包含自身)
os.path.exists(path) —判断路径是否存在
所给的路径如果存在返回 True 不存在返回 False
代码示例
import os
res = os.path.exists(r'F:\python project\re_test\re_a.py')
print(res)
res1 = os.path.exists(r'aaaa.txt')
print(res1)
打印结果
True
False
os.path.isabs(path)
判断给定路径是否为绝对路径
代码示例
import os
res = os.path.isabs(r'F:\python project\re_test\re_a.py')
print(res)
打印结果 True
os.path.isfile(path)
如果给定路径指向的是一个存在的文件,返回True。否则返回False
代码示例
import os
res = os.path.isfile(r'OS_a') # OS_a 是文件夹
print(res)
打印结果
False
os.path.isdir(path)
如果给定路径是一个存在的文件夹,则返回True。否则返回False
代码示例
import os
res = os.path.isfile(r'OS_a') # OS_a 是文件夹
print(res)
打印结果
True
os.path.join()
智能地拼接一个或多个路径部分。 返回值是 path 和 *paths 的所有成员的拼接。
如果某个部分为绝对路径,则之前的所有部分会被丢弃并从绝对路径部分开始继续拼接
语法格式
os.path.join(path, *paths)
代码示例一
import os
res = os.path.join(r'OS_a', r'Os_b', r'Os_c')
print(res)
打印结果
OS_a\Os_b\Os_c
此结果使用 字符串+字符串 的方式也能实现,但是不同系统之间的路径分割符是不一样的,所以兼容性不强
若是一定要使用字符串相加,可以将结果调用方法realpath()规范路径。
代码示例二
import os
res = os.path.join(
r'F:\python project\re_test\re_a.py',
r'OS_a',
r'F:\python project\re_test\b.py',
r'Os_b',
r'Os_c')
print(res)
打印结果
F:\python project\re_test\b.py\Os_b\Os_c
像示例中很乱的情况,直接会以从左往右最后一个绝对路径开始拼接。
os.path.getsize(path)
获取指定路径指向的文件大小以字节为单位
代码示例
import os
res = os.path.getsize(r'F:/python project/re_test/b.txt')
print(res)
os.path.getatime(path)
返回path所指向的文件或者目录的最后访问时间
os.path.getmtime(path)
返回path所指向的文件或者目录的最后修改时间