Python-文件处理
什么是文件?
文件是操作系统为用户提供的一个虚拟单位
打开文件的步骤
- 打开文件
- 读取/写入
- 关闭文件
文件对象 open(打开) 文件名 打开模式 打开文件的字符编码
f = open( "filename", "rt", encoding="utf8")
data = f.read()
print(data)
f.flush() # 保存文件
f.close() # 关闭文件
文件分类
- txt文件,文本文件
- 二进制文件,图片/视频/音频文件
文件的三种打开模式
模式 | 描述 |
---|---|
r | 只读 |
w | 可写,清空后写入 |
a | 追加 |
文件的两种打开方式
方式 | 描述 |
---|---|
t | txt文本文件 |
b | bytes 二进制文件/音频/图片/视频 |
使用方式
模式 | 描述 |
---|---|
rt | 以只读模式打开文本文件 |
wt | 可写模式 ,清空文件后写入 |
at | 可写模式,追加文本内容 |
rb | 以只读模式打开二进制文件 |
wb | 可写模式 ,清空文件后写入 |
ab | 可写模式,追加文本内容 |
with 管理上下文
with open("filename","r",encondig="utf8") as f:
print(f.read())
with open()方法不仅提供自动释放操作系统占用的方法,并且with open可以使用逗号分隔,一次性打开多个文件,实现文件的快速拷贝。
绝对路径和相对路径
-
绝对路径
从盘符开始写一个完整的路径
-
相对路径
相对于当前执行文件所在的文件夹的文件。
文件高级应用(了解)
模式 | 描述 |
---|---|
r+ | 可读可写 |
w+ | 可读可写 |
a+ | 可读可写 |
不能建议同时使用可读可写的模式进行对文件的操作
文件内指针移动
一个字符 表示3个字节
一个英文字母表示1个字节
打开文件模式要用二进制模式(b)
file = "36r.txt"
# 文件内容如下
真帅qinyj 真帅
-
seek
两个参数,代表文件指针的偏移量,偏移量的单位是字节个数
with open(file,"rb") as fr:
fr.seek(3,0) # 控制指针到3字节后面开始读后面的内容
print(fr.read().decode("utf8")) # 帅qinyj 真帅
-
tell
统计 从文件开头到当前的指针所在位置
with open(file,"rb") as fr:
# fr.seek(3,0)
print(fr.read().decode("utf8"))
print(fr.tell()) # 告诉当前文件的指针在哪里,上一条代码已经读完所有的字符,所以是在文件末尾
真帅qinyj 真帅
18
-
truncate(n)
截断文件
with open(file,"ab") as fr:
fr.truncate(3) # 截断几个字节之后的所有字符
真
文件修改
思路:
打开两个文件;
读第一个文件内容;
将读到的内容写入第二个文件中;
删除第一个文件;
将第二个文件重命名为第一个文件的名字。
import os
with open("36r.txt","r",encoding="utf8") as fr,\
open("36r.txt.swap","a",encoding="utf8") as fw:
data = fr.read()
data = data.replace("真","真好真好qinyj")
fw.write(data)
fw.flush()
os.remove("36r.txt")
os.rename("36r.txt.swap","36r.txt")
print("done....")
import os
file = "36r.txt"
with open(file,"r",encoding="utf8") as fr,\
open(file + ".swap","w",encoding="utf8") as fw:
for i in fr:
i = i.replace("你分变更六","dsfsfsdfsdggggggggggggggggggggggggggggggg")
fw.write(i)
os.remove(file)
os.rename(file + ".swap",file)