目前,计算机上主流的操作系统有Windows、Unix、Mac OS等,os模块为多操作系统的访问提供了相关功能的支持,涉及对文件相关操作功能的实现,系统访问path路径的操作,shell命令行操作,Linux扩展属性的操作,流程管理,CPU等硬件相关信息的获取,基于操作系统的真正的随机数的操作及相关的一些系统常量进行介绍。
Os库提供通用的、基本的操作系统交互功能
在python中,使用到一个库的时候,需要使用到 import
将这个库导入到当前的工作空间中,其中,导入的方式有下面几种
# 1.使用 import 导入
import 库名
import 库名1,库名2,... # 导入多个库
# 2.使用 from
from 库名 import 函数名 # 导入指定的方法
from 库名 import * # 导入该库中所有的方法
# 3.使用 as
import 库名 as 别名 # 防止库名太长,不好记
from 库名 import 函数名 as 别名 # 导入库中的某个方法,为其设置别名
os.system("mv a.txt b.txt")
# 可以将 "mv a.txt b.txt" 作为当前操作系统的命令进行使用
import os
print(os.name) # 打印当前系统类型
print(type(os.name)) # 打印返回值类型
函数 | 功能描述 |
---|---|
os.getced() | 获取当前的路径 |
os.chdir(x) | 将当前的工作目录更改为x |
os.rename(x,y) | 将指定路径的文件或目录 x 重命名为 y |
os.remove(x) | 删除指定路径文件 x (如果指定到一个目录,则会报错) |
os.mkdir(x) | 创建指定路径的新目录 x (如果存在,则报错) |
os.rmdir(x) | 删除指定路径x的空目录(如果目录不为空,则报错) |
os.makedirs(x) | 递归地创建路径x中的多级目录(如果目录已存在,则不回发生任何操作) |
os.removedirs(x) | 递归地删除路径 x 中所有为空的目录 |
当前目录以及下面的文件
# tree /root/python
python
└── os
├── a.txt
└── main.py
# 当前路径 /root/python/os
import os
a = os.getcwd()
print(a)
# 输出: /root/python/os
# 当前路径 /root/python/os
import os
a = os.getcwd()
print(a)
os.chdir("/opt/")
a = os.getcwd()
print(a)
# 输出:
# /root/python/os
# /opt
import os
a = "/root/python/os/a.txt"
b = "/root/python/os/b.txt"
os.rename(a,b)
# tree /root/python
python
└── os
├── b.txt
└── main.py
import os
os.remove('/root/python/os/b.txt')
当前目录以及下面的文件
# tree /root/python
python
└── os
└── main.py
import os
os.mkdir("/root/python/os/mk")
# tree /root/python
python
└── os
├── main.py
└── mk
import os
os.rmdir("/root/python/os/mk")
os.rmdir("/root/python/os")
# 执行结果
# Traceback (most recent call last):
# File "/root/python/os/main.py", line 26, in <module>
# rmdir()
# File "/root/python/os/main.py", line 25, in rmdir
# os.rmdir("/root/python/os")
# OSError: [Errno 39] Directory not empty: '/root/python/os'
# tree /root/python
python
└── os
└── main.py
import os
os.makedirs("/root/python/os/mk/dump")
# tree /root/python
python
└── os
├── main.py
└── mk
└── dump
import os
os.removedirs("/root/python/os/mk/dump")
# tree /root/python
python
└── os
└── main.py
os.path模块是Python中处理路径信息的常用模块之一,作为os模块
的子模块,通常两者一起使用,来操作文件和目录。
路径中要区分绝对路径和相对路径
函数 | 功能描述 |
---|---|
os.path.basename(path) | 返回路径中的最后一项,通常是文件名 |
os.path.dirname(path) | 返回路径得到目录部分 |
os.path.split(path) | 分割路径,将目录和文件名拆开,返回一个二元的元组 |
os.path.join(path1,path2…) | 将多个路径组合为一个完整的路径,返回一个字符串 |
os.path.abspath(path) | 返回指定路径的绝对路径 |
import os
name = os.path.basename("/root/python/os/a.txt")
print(name)
# 输出:a.txt 对于是否存在都可以获取到
之后对 /root/python/os/ /root/python/os 这两种情况进行了测试
/root/python/os/ 运行结果为 空
/root/python/os 运行结果为 os
import os
name = os.path.diename("/root/python/os/a.txt")
print(name)
# 输出:/root/python/os/ 对于是否存在都可以获取到
之后对 /root/python/os/ /root/python/os 这两种情况进行了测试
/root/python/os/ 结果为 /root/python/os/
/root/python/os 结果为 /root/python/
import name
name = os.path.split("/roo/python/os/a.txt")
print(name)
# 输出结果 ('/roo/python/os', 'a.txt')
import os
name = os.path.join("/1/","2/","3/")
print(name)
# 输出结果 /1/2/3/
import os
name = os.path.abspath("../../.ssh")
print(name)
# 输出结果 /root/.ssh
函数 | 功能描述 |
---|---|
os.path.isdir(path) | 判断该路径是否为目录,返回 true 或 false |
os.path.isfile(path) | 判断该路径是否为文件,返回 true 或 false |
os.path.isabs(path) | 判断该字符串是否为绝对路径,返回 true 或 false |
os.path.exists(path) | 判断该路径(或文件)是否存在,返回 true或false |
os.path.getsize(path) | 判断指定文件的大小,单位为字节 |
os.path.getctime(path) | 获取指定文件或目录的创建时间 |
os.path.getmtime(path) | 获取指定文件或目录的修改时间 |
import
dir1 = os.path.isdir("/root/")
print(dir1)
dir2 = os.path.isdir("/root/python/os/a.txt")
print(dir2)
# 执行结果
# True
# False
import
file1 = os.path.isfile("/root/")
print(file1)
dir2 = os.path.isfile("/root/python/os/a.txt")
print(file2)
# 执行结果
# False
# True
abs1 = os.path.isabs("/root/python")
print(abs1)
abs2 = os.path.isabs("./python")
print(abs2)
# 执行结果
# True
# False
import os
ex1 = os.path.exists("/root/python")
print(ex1)
ex2 = os.path.exists("/root/os")
print(ex2)
# 执行结果
# True
# False
import os
size = os.path.getsize("/root/")
# 执行结果
# 4096
import os
time = round(os.path.getctime("/root/python/os")) # round是用来四舍五入的
print(time)
# 执行结果
# 1705043532 这是一个时间戳
import os
time = round(os.path.getctime("/root/python/os/a.txt"))
print(time)
time1 = round(os.path.getmtime("/root/python/os/a.txt"))
print(time1)
这个修改时间和创造时间一直都是一致的,无法进行测试
在处理数据的时会遇见一种场景,需要对目录中特定的文件进行处理,那怎么获取到一个文件的类型呢? os.path.splitext()
函数带你走近这个秘密
os.path.splitext(path)
会将路径分为文件名和扩展名,返回一个二元组,位置一是文件名,位置二是扩展名,如果该文件没有扩展名,则第二个元素为空字符串。
import os
name1 = os.path.splitext("/root/python/os/a.txt")
print(name1)
name2 = os.path.splitext("/root/python/os/a")
print(name2)
# 输出结果
# ('/root/python/os/a', '.txt')
# ('/root/python/os/a', '')
os.listdir(path)
函数得到一个包含指定目录下所有文件和子目录名称的列表
import os
name = os.listdir("/")
print(name)
# 输出结果: ['wget-log.3', 'dev', 'run', 'wget-log.2', 'var', 'boot', 'media', 'wget-log.1', 'srv', 'ssh', 'usr', 'lib', 'opt', 'lost+found', 'sys', 'root', 'wget-log', 'sbin', 'ssd', '1.txt', 'aaa', 'proc', 'tmp', 'bin', 'mnt', 'snap', 'etc', 'home']
os.walk(path, topdown=True, onerror=None, followlinks=False)
函数是一个递归式的遍历,用于遍历指定目录及其目录中的所有文件和目录!
- path 为要遍历的目录路径。返回的是一个三元组(dirpath,dirnames,filenames),dirpath 为当前遍历的目录树的目录路径,dirnames 为当前目录下所有子目录列表,filenames为当前目录下所有文件列表。
- topdown 为可选参数,为 True 时(默认)表示优先遍历 path目录,即 walk 会遍历 top 文件夹与其每一个子目录。否则会优先遍历 top 的子目录。
- onerror 为可选的错误处理函数。
- followlinks为可选参数,为 True 时表示会遍历目录下的快捷方式实际所指的目录,为 False 时(默认)表示优先遍历 top 的子目录。
当我们使用os.walk()
函数时,它会从根目录开始遍历整个目录树,并且对于每个目录,都会返回一个三元组。
import os
# 递归遍历该目录
walk_tree = os.walk('/root/python')
# 从根目录开始遍历整个目录树,每一个目录都会返回一个三元组,使用for循环依次查看结果
for dirpath,dirnames,filenames in walk_tree:
print('----------当前遍历的目录树的目录路径----------')
print(dirpath)
print('----------当前目录下的所有子目录列表----------')
# 遍历当前目录下所有的子目录
for dirname in dirnames:
# 拼接路径,得到子目录的路径
dir_name = os.path.join(dirpath, dirname)
print(dir_name)
print('----------当前目录下所有文件列表----------')
# 遍历当前目录下所有的文件
for filename in filenames:
# 拼接路径,得到文件路径
file_name = os.path.join(dirpath,filename)
print(file_name)