OS模块
-
基本使用
import os# 查看操作系统类型,nt表示windows,posix表示类unix print(os.name) # 可以执行系统命令 # 清空屏幕 # os.system('cls') # 启动计算器 # os.system('calc') # 环境变量 # 所有环境变量 # env = os.environ # for key in env: # print(key, env[key]) # 获取指定环境变量 print(os.environ['path']) # 通过函数获取 print(os.environ.get('pathxx', 'xxx')) # 上面的简化书写方案 print(os.getenv('xxx', '123456'))
-
环境变量
- windows下设置:set 名称=值
- windows下获取:set 名称
- 注意:代码获取临时环境变量需要在同一终端执行程序
目录表示
-
相对目录:有参考的目录
- .表示当前目录,./通常可以省略
- …表示上一级目录,…/…/表示上上一级目录
-
绝对目录:
- windows:以盘符开头的目录
- 类unix:以/开头的目录
-
目录分隔符:
平台 说明
windows / 或
类unix /
建议 / -
目录相关操作
import os# 查看当前工作目录 print(os.getcwd()) # 创建目录 # os.mkdir('test') # 不能创建中间目录 # os.mkdir('test/abc') # 创建目录,可以创建中间目录 # os.makedirs('test/abc') # 删除目录:只能删除空目录 # os.rmdir('hello') # os.rmdir('test') # 删除文件 # os.remove('00-xxx.txt') # 修改名称:可以是目录 # os.rename('test', 'hello') # 也可以是文件 # os.rename('00-test.txt', '00-xxx.txt') # 查看目录信息 # print(os.listdir('.')) # 查看状态信息:目录时size有问题 # print(os.stat('01-renshi.py')) # stat = os.stat('01-renshi.py') stat = os.stat('hello') print(stat.st_size)
-
path
from os import path
import os# 拼接目录:目录分隔符会自动处理 print(path.join('abc/def/', 'hello.py')) # 目录提取 print(path.dirname('abc/def/hello.py')) print(path.dirname(os.getcwd())) # 文件名提取 print(path.basename('abc/def/hello.py')) print(path.basename(os.getcwd())) # 切割路径与文件名 dir_name, file_name = path.split('abc/def/hello.py') print(dir_name, file_name) # 切割文件名与后缀 print(path.splitext('hello.py')) # 判断路径文件是否存在 print(path.exists('hello')) # 判断是否是目录文件 print(path.isdir('hello')) # 判断是否是普通文件 print(path.isfile('hello')) # 判断是否是绝对目录 print(path.isabs('hello')) print(path.isabs(os.getcwd())) # 转换为绝对目录 print(path.abspath('hello')) # 获取指定路径的文件大小,获取目录时有问题 print(path.getsize('01-renshi.py'))
文件操作
-
打开文件
fp = open(‘00-test.txt’) -
打开模式
模式 说明
r 只读方式,若文件不存在则会报错
w 只写方式,文件不存在则创建,存在则清空
a 追加方式,文件不存在则创建,文件存在则打开(不会清空内容)
r+ 在r方式的基础上添加写的权限
w+ 在w方式的基础上添加读的权限
a+ 在a方式的基础上添加读的权限 -
在上面的打开方式后加一个字符’b’,表示以字节流的方式进行读写操作,于是又有了6中方式:rb、wb、ab、rb+、wb+、ab+,不加b是以字符串的形式进行读写操作。
-
bytes类型
b = b'hello' print(b, type(b)) # 编码: str => bytes b2 = 'hello'.encode('utf-8') print(b2) # 解码: bytes => str s = b2.decode('utf-8') print(s, type(s))
-
编码方式
编码 说明
ASCII 美国信息交换标准代码(128)
ANSI 扩展的ASCII
GB2312 中国的ANSI
GBK 扩充的GB2312
unicode 万国码,将所有国家的字符全部编码
utf-8 是一种可变长度的unicode实现方案,对中文支持比较友好 -
文件读写
fp = open(‘00-test.txt’, ‘r+’)if fp.readable(): # 设置操作位置:字节流方式打开没有问题,字符串方式会出问题 # 参数1:偏移量 # 参数2:参考位置,0表示开头、1表示当前位置、2表示末尾 fp.seek(5, 0) # 返回文件操作的位置 print(fp.tell()) print(fp.read(5)) # print(fp.tell()) # print(fp.read(5)) # 每次读取一行内容 # print(fp.readline(), end='') # print(fp.readline()) # 一次性读取所有的行,返回一个列表 # print(fp.readlines()) else: print('文件不可读') if fp.writable(): pass # fp.write(b'123456') else: print('文件不可写') fp.close()
-
关闭文件
fp.close()
练习