文件操作
目录管理(os)
示例
# 执行系统命令 # 清屏 # os.system('cls') # 调出计算器 # os.system('calc') # 查看操作系统类型 # nt:表示windows,posix:表示类unix # print(os.name)
查看当前工作目录
import os #查看当前工作目录 print(os.getcwd())
创建目录:mkdir
# os.mkdir('test') # 不能创建中间目录 os.mkdir('a/b/c')
创建目录:makedirs
# 可以创建中间目录 os.makedirs('a/b/c')
删除目录:rmdir
# 删除目录:只能是空目录 # os.rmdir('test') # 不能删除非空目录 os.rmdir('a')
修改名称:rename
# 重命名:目录和文件都可以 # os.rename('a', 'aa') os.rename('test.py', 't.py')
查看文件信息:stat
# 查看文件信息:可以是目录 print(os.stat('t.py')) print(os.stat('aa'))
查看目录文件信息:listdir
# 查看目录文件信息 print(os.listdir(os.getcwd()))
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())) # 切割路径与文件名 # print(path.split('abc/def/hello.py')) # dir, name = path.split('abc/def/hello.py') # print(dir, name) # 切割文件名与后缀 # print(path.splitext('hello.py')) # print(path.splitext('abc/def/hello.py')) # 判断文件是否存在,可以是目录 # print(path.exists('aa')) # 判断是否是目录文件 # print(path.isdir('t.py')) # print(path.isdir('aa')) # 判断是否是普通文件 # print(path.isfile('t.py')) # print(path.isfile('aa')) # 获取文件大小,仅限于文件 print(path.getsize('t.py')) # 对于目录会有问题 print(path.getsize('aa'))
练习:统计一个目录的大小,需要使用递归
文件管理
打开文件(open)
- 示例
fp = open('00-test.txt', 'r')
- 参数
file:操作的文件名 mode:打开的方式 endoding:编码方式,通常不用指定,系统会自动识别
- 打开方式
r:只读方式,文件不存在会报错 w:只写方式,文件不存在则创建,存在则清空 a:追加方式,文件不存在则创建,存在直接打开(不会清空),只能向最后追加 r+:在r方式基础上添加可写的权限 w+:在w方式基础上添加可读的权限 a+:在a方式基础上添加可读的权限 在上面的打开上添加一个字符b,表示以二进制的方式进行操作:rb、wb、ab、rb+、wb+、ab+ 说明:没有添加b的打开方式,默认的读写都是以字符串形式操作的, 带b的是以bytes形式进行的
- 编码方式
ASCII:美国信息交换标准代码(128) ansi:扩展的ASCII(256) gb2312:中国的ansi gbk:扩充的gb2312 unicode:万国码,将所有国家的所有字符全部进行统一编码 utf-8:一种可变长度的unicode实现方案,而且对中文支持比较友好。
关闭文件
fp.close()
文件读写
# 判断是否可读 # print(fp.readable()) # 读取指定长度内容 # content = fp.read(5) # 读取一行 # content = fp.readline() # 读取所有的行,返回一个列表 # content = fp.readlines() # 判断是否可写 # print(fp.writable()) # 写入内容 # fp.write('hello')
操作位置
# 文件操作位置 # print(fp.tell()) # 设置操作位置 # 参数1:偏移量 # 参数2:参考位置,0:开头,1:当前位置,2:结束 # 以bytes形式读写seek没有问题,以str型是读写的seek只能设置从开头偏移 fp.seek(5, 0)
文件删除
os.remove('文件名')
练习:删除一个目录,需要使用递归
bytes类型
示例:
# s = b'hello' # print(s) # print(type(s)) # 编码:str => bytes s = 'hello'.encode('utf-8') print(type(s)) # 解码:bytes => str b = s.decode('utf-8') print(b, type(b))
自行学习
- StringIO
BytesIO
环境变量
设置:
set 名称=值
获取:
set 名称
代码:
import os # 获取环境变量 # print(os.environ['path']) # 不存在也不报错 # print(os.environ.get('abc', 'hello')) # 等价于上面的式子 print(os.getenv('abc', 'world'))
目录表示
- 相对目录:有参考的目录
- ’.’表示当前目录,’./’通常可以省略
- ‘..’表示上一级目录,上上一级目录:
../../
- 绝对目录:
- windows:盘符开头的目录
- 类unix:以’/’开头的目录
- 目录分隔符
- windows:’/’ 或 ‘\’
- 类unix:’/’
- 建议:统一使用’/’
练习:路径信息全部需要拼接
实现一个文件的拷贝功能,注意:大文件的问题
删除一个目录
统计一个目录的大小
拷贝一个目录
移动一个目录
整理目录
- 一个目录下有各种文件,包括文件夹
- 将所有的目录文件都放到DIRS目录下
- 所有无后缀的文件统一放到OTHERS目录下
- 有后缀的文件放到后缀大写的目录下
- 示例:
整理前: test/ dir1/ dir2/ dir3/ 1.py 2.py 3.txt 4.pdf 123 456 整理后: test/ DIRS/ dir1/ dir2/ dir3/ OTHERS/ 123 456 PY/ 1.py 2.py TXT/ 3.txt PDF/ 4.pdf