python 目录管理与文件管理
目录管理(os)
-
system:执行系统命令
# 执行系统命令 os.system('cls')
-
name:获取操作系统名称
# 操作系统名称,nt代表Windows, posix代表类unix print(os.name)
-
environ
# 获取环境变量 env = os.environ print(env['path']) print(env.get('path')) print(env.get('HELLO'))
-
getcwd:# 获取当前工作目录
print(os.getcwd())
-
mkdir:创建目录
# 创建目录,只能是单层目录 # os.mkdir('hello') # 这里会失败 # os.mkdir('a/b/c')
-
makedirs:创建目录,会创建中间目录
# 会创建中间目录 # os.makedirs('a/b/c')
-
rmdir:删除目录,只能删除空目录
# 删除目录,只能删除空目录 # os.rmdir('hello') # 当目录中有其他文件或目录时删除失败 # os.rmdir('a')
-
rename:修改文件名(可以是目录)
# 修改名字,可以是目录 (old, new) # os.rename('a', 'c') # 也可以修改文件名 # os.rename('test.py', '123.py')
-
stat:查看文件信息
# 查看文件信息 print(os.stat('123.py'))
-
listdir:列出直接子文件
# 列出直接子文件 print(os.listdir('c'))
-
相对目录、绝对目录
相对目录:就是有参考的目录
. 表示当前目录,通常 ./ 可以省略
.. 表示上一级目录
绝对目录:windows中以某个盘符开头,类unix系统中以'/'开头的目录
目录分隔符:
类unix:/
windows:/ 或 \
建议:统一使用 '/' 表示
说明:在文件操作时,使用相对目录和绝对目录都可以 -
path
from os import path # 拼接目录 print(path.join('abc/def', '123.py')) # 提取文件后缀(切割文件名与后缀) name, ext = path.splitext('789.py') print(name, ext) # 提取目录名(最后一个目录分隔符的前面内容) print(path.dirname('123/456/789.py')) # 提取文件名(包括后缀) print(path.basename('123/456/789.py')) # 切割文件名和目录 print(path.split('123/456/789.py')) # 判断文件是否存在(可以是目录) print(path.exists('123.py')) # 判断是否是目录文件 print(path.isdir('c')) # 判断是否是普通文件 print(path.isfile('123.py')) # 获取普通文件大小 print(path.getsize('01-os.py')) # 不可以获取目录大小,始终是0 print(path.getsize('c'))
练习:自己实现目录大小的统计,需要使用递归
文件管理
-
打开文件(open)
-
示例:
fp = open('00-test.txt', 'r')
-
参数:
参数1:文件路径名
参数2:打开方式
参数3:编码格式,通常可以不指定,系统会自动识别处理-
打开方式:
r:只读方式,文件不存在会报错
w:只写方式,文件不存在创建文件,文件存在清空内容
a:追加方式,文件不存在则创建,文件存在直接打开(不会清空内容),只能向最后追加内容
r+:在r方式下添加写的功能
w+:在w方式下添加读的功能
a+:在a方式下添加读的功能
在上面的模式上添加b,表示二进制方式打开:rb、wb、ab、rb+、wb+、ab+
1.文件的读写数据全部是bytes类型,没有添加b的方式全部是str类型-
编码方式:
ascii:美国信息交换标准代码
ansi:扩展的ascii
gb2312:中国的ansi
gbk:扩展的gb2312
unicode:是一套理论,实现方式不限
utf-8:可变长度的unicode实现,对中文的支持比较友好 -
-
关闭文件(close)
# 关闭文件 fp.close()
-
文件读写
# 读取指定长度内容 # ret = fp.read(3) # 写入内容 fp.write('hello') # 读取一行,包括换行符 # print(fp.readline()) # 读取所有行,返回一个列表 print(fp.readlines()) # 是否可读 print(fp.readable()) # 是否可写 print(fp.writable())
-
文件指针
# 返回文件指针的操作位置 print(fp.tell()) # 设置偏移 # 参数1:偏移量 # 参数2:参考位置,0:开头,1:当前,2:末尾 # 定位到末尾 fp.seek(0, 2)
带b的方式seek没有异常;不带b的时候,相对于当前位置无法偏移,相对于末尾只能偏移0
-
文件删除
import os os.remove('02-test.py')
练习:(递归)删除一个目录
练习
-
1.实现一个拷贝文件的功能,提醒:要考虑超大文件问题,如:依次读取1024字节,循环读取
-
2.递归删除一个文件夹
-
3.统计一个文件夹的大小
-
4.拷贝一个文件夹
-
5.移动一个文件夹
-
6.目录整理
-
一个目录中有各种文件,也有文件夹
-
将所有的文件夹统一放到dir目录下
-
将没有后缀的文件统一放到others目录下
-
将有后缀的文件放到后缀名大写的文件夹下
# 处理前
test/
dir1/
dir2/
1.py
2.py
3.txt
4.pdf
123
456
# 处理后
test/
DIR/
dir1/
dir2/
PY/
1.py
2.py
TXT/
3.txt
PDF/
4.pdf
OTHERS/
123
456友情提醒:中间使用的所有文件目录的判断都需要进行拼接。
-