Python入门之os模块详解
1.os模块的作用
os模块是python标准库中的一个用于访问操作系统功能的模块, os模块提供了其他操作系统接口,可以实现跨平台访问。
2.操作系统
os.sep返回系统路径的分隔符
linux类系统的路径分隔符是“/”,windows系统的分隔符是“\”
[kiosk@foundation72 os]$ cat os_01.py # _*_coding:utf-8_*_ import os print(os.sep) # 返回系统路径的分隔符 [kiosk@foundation72 os]$ python3 os_01.py / # 运行返回结果
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
os.name返回当前平台操作系统
当返回的值为posix时,则为linux系统;返回值为nt时,则为windows系统
import os
print(os.name)
1
2
1
2
os.uname() 返回操作系统的详细信息,也可以得到具体分项的信息
import os #导入模块 uname = os.uname() #使用变量接收 print(uname) # 输出系统所有详细信息 print(uname.sysname) # 输出系统操作系统类型 print(uname.nodename) # 输出主机名称 print(uname.release) # 输出内核版本 print(uname.version) # 输出系统版本 print(uname.machine) #输出硬件架构
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
os.environ 系统的环境变量,输出为一个字典形式,系统环境信息全部存储在该字典中
import os
print(os.environ)
#从环境变量字典中获取相应的信息
# os.environ['HOMEPATH'] # 当前用户主目录
# os.environ['TEMP'] # 临时目录路径
# os.environ['PATHEXT'] # 可执行文件
# os.environ['SYSTEMROOT'] # 系统主目录
# os.environ['LOGONSERVER'] # 机器名
# os.environ['PROMPT'] # 设置提示符
# os.environ['PATH'] # 系统环境信息
print(os.environ.get('PATH'))
1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
9
10
11
12
13
3.对文件以及目录的操作
(1) 文件操作:创建文件以及删除文件
os.mknod(文件名称) # 当该文件存在的时候出现报错
os.remove(文件名称 ) # 当该文将不存在的时候出现报错
import os os.mknod('/public/toto') # 创建文件 os.remove('/public/toto') # 删除文件
- 1
- 2
- 3
- 1
- 2
- 3
(2) 目录操作:创建目录以及删除目录
os.listdir(目录名称) # 列出目录中的所有文件以及目录,返回一个列表
os.mkdir(目录名称) # 创建一个目录,不能递归创建,目录存在时再创建报错。
os.makedirs('目录名称’) # 递归创建目录,目录存在时再创建报错
os.rmdir(目录名称) # 删除一个空目录,不能递归删除,目录不存在时以及存在文件时候报错。
os.removedirs('目录名称’) # 递归删除空目录,目录不存在或者目录中存在文件时报错
import os
print(os.listdir('/public'))
os.mkdir('/public/dir1')
print(os.listdir('/public'))
os.makedirs('/public/dir2/tops2/toto2')
print(os.listdir('/public'))
os.rmdir('/public/dir1')
print(os.listdir('/public'))
os.removedirs('/public/dir2/tops2/toto2')
print(os.listdir('/public'))
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
(3) 对文件以及目录进行重命名
os.rename('oldname’,'newname’) # 当新名字已经被使用的时候,重命名失败
import os print(os.listdir('/public')) os.rename('/public/toto','/public/lala') os.rename('/public/dir','/public/top') print(os.listdir('/public'))
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
['toto', 'dir'] # 原来的文件以及目录名称
['lala', 'top'] # 重命名之后的文件和目录的名称
1
2
1
2
4.path模块
(1)判断
os.path.exists(文件/目录) # 判断文件/目录是否存在,返回为True 或者 False
os.path.isdir(目标) # 判断目标是否为目录,返回为True 或者 False
os.path.isfile(目标) # 判断目标是否为文件,返回为True 或者 False
os.path.isabs(目标路径) # 判断是否为绝对路径,返回为True 或者 False
import os # 导入模块 print(os.listdir('/public')) # 显示目录/public中的所有文件以及目录 print(os.path.exists('/public/toto')) print(os.path.exists('/public/lala')) # 判断是否存在 print(os.path.isfile('/public/lala')) print(os.path.isfile('/public/top')) # 判断是否为文件 print(os.path.isdir('/public/top')) print(os.path.isdir('/public/lala')) # 判断是否为目录
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
(2) path模块对文件/目录路径以及名称进行处理
os.path.abspath(文件/目录)
# 以绝对路径显示文件或者目录,此处的文件或者目录是绝对路径的时候,不做改变,输出原右的内容,当不是绝对路径的时候,将当前所在的位置的绝对路径添加到输入的文件或者目录相对路径前面,形成绝对路径
import os
print(os.path.abspath('toto/lele'))
print(os.path.abspath('/lala/tops'))
#输出结果:
/home/kiosk/PycharmProjects/python/os/toto/lele
/lala/tops
1
2
3
4
5
6
7
1
2
3
4
5
6
7
os.path.join(路径1,路径2)
# 将路径1 和路径2 连接起来,如果路径2 为绝对路径则输出路径2.
import os print(os.path.join('toto/lele','lala/tops')) print(os.path.join('toto/lele','/lala/tops')) #输出结果; toto/lele/lala/tops # 将两个路径连接 /lala/tops # 只是返回第二个绝对路径
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
os.path.basename(文件/目录的路径)
# 返回文件或者目录名称
os.path.dirname(文件/目录的路径)
# 返回指定文件或者目录的上层路径
import os
print(os.path.basename('toto/lele/lala/tops'))
print(os.path.dirname('toto/lele/lala/tops'))
#输出结果:
tops
toto/lele/lala
1
2
3
4
5
6
7
1
2
3
4
5
6
7
os.path.splitext(文件)
# 将文件后缀进行分离,返回一个元组,元组的第一个元素为除过文件名称后缀剩余部分,第二个元素为文件后缀;当文件没有后缀的时候,第二个元素为空。
import os print(os.path.splitext('toto/lele.html')) print(os.path.splitext('toto/lele')) #输出结果: ('toto/lele', '.html') ('toto/lele', '')
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
os.path.split('文件/目录')
#将给出的文件或者目录进行分离,返回一个元组,第一个元素为除过目标文件或者目录之外剩余的路径,第二个元素为文件或者目录名称;当只有文件或者目录名称时候,第一个元素为空。
import os
print(os.path.split('/haha/lele/yeye/toto'))
print(os.path.split('toto'))
#输出结果:
('/haha/lele/yeye', 'toto')
('', 'toto')
1
2
3
4
5
6
7
1
2
3
4
5
6
7
5.os模块遍历指定目录的用法
import os from os.path import join for root,dir,files in os.walk('/var/log'): # print(root) ##查看/var/log/下的所有属于root用户的目录,但是没有权限的目录无法显示出来 print(dir) ##查看可以访问的所有目录 # print(files) ##查看目录下的文件 for name in files: ##查看目录中的所有文件(有查看的权限) print(join(root,name))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
6.练习
在当前目录新建目录img, 里面包含多个文件, 文件名各不相同(X4G5.png);
将当前img目录所有以.png结尾的后缀名改为.jpg
import os
import random
import string
def gen_code():
'''生成文件名称'''
li = random.sample(string.ascii_letters string.digits,4)
return ''.join(li)
def create_files():
li = [gen_code() for i in range(100)]
os.mkdir('img')
for i in li:
os.mknod('img' i '.png')
create_files()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import os def change(dirname,old_suffix,new_suffix): filename_li = [name for name in os.listdir(dirname) if name.endswith(old_suffix)] for filename in filename_li: oldname = os.path.join(dirname,filename) newname = os.path.join(dirname,os.path.splitext(filename)[0] new_suffix) os.rename(oldname,newname) change('img','.png','jpg')
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8