文件操作
1,文件操作
open()
- 打开文件
- open('a.txt','r',encoding='utf-8'),默认代开模式为"r"
file
- 文件路径
mode
- 操作文件的模式
encoding
- 文件的编码集
- Windows的编码方式为gbk
- Linux的编码方式为utf-8
- 文件用什么编码,用什么方法打开
close()
- 关闭文件
- f.close()
f
-
文件句柄
-
f = open('a.txt','r',encoding='utf-8')
-
1,由应用程序向操作系统发起open()命令 2,操作系统打开文件,并返回一个文件句柄给应用程序 3,应用程序将句柄赋值给变量f
r操作
- 只读模式:【默认模式,文件必须存在,不存在则抛出异常】
- f.read()
- 全部读取,光标移动到文件末尾
- f.read('int')
- 看文件的操作方式,读取(int)个字符
- f.readline()
- 读取一行内容,光标移动到第二行首部
- f.readlines()
- 读取每一行内容,存放于列表中
读取大文件
- for in in f.read()
w操作
- 只写模式:【不可读;不存在则创建;存在则清空内容】
- 先清空文件
- 再写入文件
路径
- 绝对路径
- 相对路径
- ../返回上一层
- 推荐使用相对路径
- 路径转义
- "//"
- "r"
a操作
- 之追加写模式:【不可读;不存在则创建;存在则只追加内容】
- 追加写
- 在原文将的基础上进行添加
2,mode
-
rb,wb,ab
-
打开方式,不能encoding字符集
-
读取的内容是字节类型,写入时也需提供字节类型,不能指定编码
-
对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)
-
rb:读字节
-
f = open('文件路径',mode = 'rb') msg = f.read() print(msg) f.close
-
wb:写字节
-
打开文件的时候才清空文件
-
ab:追加字节
-
-
r+ 表示可以同时读写某个文件
-
r+:读写
-
f = open('文件路径',mode = 'r+',encoding = 'utf-8') msg = f.read() f.write() f.flush() f.close() print(msg)
-
w+:写读(移动光标)
-
a+:追加写,读(移动光标)
-
3,其他操作
- tell
- 定位光标的位置,返回的是字节数
- seek
- 移动光标
- seek(0,0) :光标移动到起始位置
- seek(0,1):当前位置
- seek(0,2):移动到文件的末尾
- seek(0,3):光标移动3个字节
4,修改文件
-
1,打开文件读取所有内容
-
2,创建一个新的文件
-
3,将旧文件的内容进行操作后写入新文件
-
将旧文件的名字改成是备份的,新文件 的名字改成是旧文件的名字
-
with open
-
with open('文件路径','r',encoding='utf-8')
- 可以自动关闭文件
- 可以同时操作多个文件
- (面向对象——上下文管理)
-
with open('文件路径',mode= 'r',encoding = "utf-8") as f1, open('文件路径',mode = "w",encoding = "utf-8") as f2: msg = f1.read() new_msg = msg.replace('内容','新内容') f2.write(new.msg) os.remove('文件路径') 删除源文件 os.rename('文件路径',’新文件名‘) 重命名新文件
-
import os with open('文件路径',mode = 'r',encoding = 'utf-8') as f1, open ('文件路径',mode = 'w',encoding = 'utf-8') as f2: for line in f1: new_line = line.replace('内容','新内容') f2.write(new.line)