文件操作
目录管理(os)
-
system:执行系统命令
# 清空屏幕 # os.system('cls') # 弹出计算器程序 os.system('calc')
-
name:查看系统名称
- nt:windows内核
- posix:类unix内核
-
获取环境变量:
# print(os.environ['path']) # print(os.environ.get('path2', 'abc')) # 这里是对上面的封装 # print(os.getenv('path2', 'hello')) print(os.getenv('XXX'))
终端操作:
设置:set XXX=yyy
获取:set XXX
-
getcwd:获取当前工作目录
print(os.getcwd())
-
mkdir:创建目录(不能带中间目录)
os.mkdir('hello')
-
makedirs:创建目录(会自动创建中间目录)
os.makedirs('a/b/c')
-
rmdir:删除目录(只能删除空目录)
os.rmdir('hello')
-
rename:重命名(可以是文件或目录)
os.rename(原名称, 新名称)
-
stat:查看文件信息(也可以是目录)
os.stat(文件名)
-
相对目录/绝对目录
相对目录:有参考的目录 . 表示当前目录,通过‘./’可以省略 .. 表示上一级目录,上上一级目录这样表示:../../ 绝对目录:windows中以盘符开头,类unix中以'/'开头的目录 目录分隔符: windows:/ 或 类unix:/ 建议:统一使用 / 说明:在文件操作时,相对目录和绝对目录都可以
-
listdir:查看目录的直接子文件
os.listdir(目录)
-
path
from os import path # 目录拼接 # print(path.join('abc/def', 'hello.py')) # 提取目录 # print(path.dirname('abc/def/hello.py')) # 提取文件名 # print(path.basename('abc/def/hello.py')) # 切割目录与文件名 # print(path.split('abc/def/hello.py')) # dir, name = path.split('abc/def/hello.py') # print(dir, name) # 切割文件名与后缀 # name, ext = path.splitext('hello.py') # print(name, ext) # 判断文件是否存在(也可以判断目录) # print(path.exists('hello.py')) # print(path.exists('aa')) # 判断是否是目录文件 # print(path.isdir('hello.py')) # print(path.isdir('aa')) # 判断是否是普通文件 # print(path.isfile('hello.py')) # print(path.isfile('aa')) # 获取文件大小,仅限于普通文件 print(path.getsize('01-os.py')) # 不可以是目录(大小始终为0) print(path.getsize('aa'))
练习:实现目录大小的统计,需要使用递归
文件操作
-
打开文件(open)
- 示例
fp = open('00-test.txt', 'r')
- 参数
参数(file):操作的文件名 参数(mode):打开方式 参数(encoding):指定编码方式,通常不用指定,系统会自动识别
- 打开方式
r:只读方式,文件不存在会报错 w:只写方式,文件不存在会创建,文件存在删除后再创建 a:追加方式,文件不存在会创建,文件存在直接打开(不会清空),只能向最后追加内容 r+:在r方式上添加写的功能 w+:在w方式上添加读的功能 a+:在a方式上添加读的功能 在上面模式上添加一个字符b,表示二进制方式打开:rb、wb、ab、rb+、wb+、ab+ 说明:没有b的方式文件读写都是str类型,带b的方式文件读写都是bytes
- 编码方式
ASCII:美国信息交换标准代码 ansi:扩展的ASCII gb2312:中国的ansi gbk:扩充的gb2312 unicode:万国码,将全部国家的字符全部包含进去进行统一编码 utf-8:可变长度的unicode实现方案,而且对中文支持友好
- bytes类型
s = b'hello' print(s) print(type(s)) # 编码:str => bytes s = 'hello'.encode('utf-8') print(s) # 解码:bytes => str b = s.decode('utf-8') print(b)
-
关闭文件
fp.close()
-
文件读写
# 判断是否可读 # print(fp.readable()) # 读取指定长度内容 # ret = fp.read(3) # 一次读取一行 # print(fp.readline()) # 读取所有内容,返回一个列表,一行一个元素 # lines = fp.readlines() # 判断是否能够进行写操作 # print(fp.writable()) # fp.write('world') # fp.write(b'gogogo')
-
文件指针
# 获取文件指针的位置 print(fp.tell()) # 设置指针偏移 # 参数1:偏移量 # 参数2:参考位置,0表示开头,1表示当前,2表示末尾 # 带b的方式打开,设置偏移没有问题 # 不带b的方式打开,设置偏移会报错 fp.seek(-5, 1)
-
文件删除
os.remove(文件名)
练习:(递归)删除一个目录