Python文件操作基础
文件分类
- 文件的分类
- 文本文件:doc,txt,等
- 二进制文件:图片,音频等
- 文件的使用流程
- 打开
- open("文件“, ”模式“):打开文件可理解为给文件架设了一个管道,管道有单向或双向模式;
- 模式
- r:以只读方式打开文件(默认模式);文件指针将会放在文件开头;文件不存在时会报错;
- w:以只写的方式打开文件;文件指针放在文件开头;文件不存在会自动创建一个一个新文件;若文件存在,会将整个文件覆盖;
- a:以追加方式(只写)打开文件; 文件的指针将会放在文件结尾;文件不存在时会自动创建一个新文件;
- b:以二进制格式进行操作文件读写。操作图片、音频、视频等;
- +:代表以”读写模式“进行打开;部分覆盖;
- 读写
- 定位:
f.seek(偏移量,[0,1,2]),第二个参数:0,开头(默认);1,当前位置;2,文件末尾;
文本文件的操作模式下(不带b),第二个参数只能是0;如果第二个参数要写1和2,必须在二进制文件操作模式;
f.tell()查询文件指针位置
- 读:
f.read(字节数) #将文件内容全部加载到内容
字节数默认是文件内容长度;读完成后,指针下标自动后移
f.readline([limit]) 读取一行数据,limit限制的最大字节数
f.readlines()自动将文件按换行符进行处理,处理好的每一行组成一个列表返回 #将文件内容都会加载到内存
for in 遍历f本身,也可以遍历行列表
注意:一般文件特别大的时候,可以使用readline函数:按行加载,节省内存,但性能较低; readlines和read会一次读取文件所有内容到内存,处理效率较高。
import collections
f = open("a.txt","r")
print(isinstance(f, collections.Iterator) #判断f是否是迭代器,迭代器可以动态的去加载内容
if f.readable():
content = f.readlines()
for i in content:
print(i, end="")
f.close()
- 写
f.write(“内容”) 返回值是写入的字节长度
判定是否可写 f.writeable()
f.flush()函数会立即情况缓冲区数据内容到磁盘文件
- 关闭
f.close() 释放系统资源;立即清空缓冲区的数据内容到磁盘文件
文件的相关操作
- 模块 import os
- 操作
- 重命名
可使用os.rename(src,dst)函数来修改文件或文件夹的名字
os.renames(old,new)可按照树状结构修改文件或文件夹名字- 删除
删除文件os.remove('文件路径’)注:文件不存在会报错
删除目录1)os.rmdir(path)该函数不能递归删除目录,如果文件夹非空则会报错;2)os.removedirs(path)可递归删除目录,如果文件夹非空会报错;- 创建文件夹
os.mkdir("文件夹名称“,[mode])注不能递归创建,mode与linux的权限类似:文件拥有者 同组用户 其他用户 的读写可执行,如os.mkdir(“Fiile”,0o777)
os.listdir(‘./’) 列举当前一级目录,‘…/'当前目录的上级目录
- 案例
- 文件的复制
- 只读模式,打开要复制的文件
追加模式,打开副本文件import os os.chdir("目标路径“) source_file = open("src.txt", "r",encoding="utf-8") #注意文件的编码方式 dst_file = open("dst.txt", "a", encoding = "utf-8")
- 从源文件中读取内容,写入到目标文件中
content = source_file.read() #将源文件内容全部读到内存(超大文件怎么办?) dst_file.write(content)
改进方案
while True: content = source_file.read(1024) #每次读1024个字节,指针自动后移 if len(content)==0: dst_file.write(content)
- 关闭源文件和目标文件
source_file.close() dst_file.close()