文件是操做系统为用户提供的一个虚拟单位编码
文件对象 open(打开) 文件名 打开模式 打开文件的字符编码 f = open( "filename", "rt", encoding="utf8") data = f.read() print(data) f.flush() # 保存文件 f.close() # 关闭文件
模式 | 描述 |
---|---|
r | 只读 |
w | 可写,清空后写入 |
a | 追加 |
方式 | 描述 |
---|---|
t | txt文本文件 |
b | bytes 二进制文件/音频/图片/视频 |
模式 | 描述 |
---|---|
rt | 以只读模式打开文本文件 |
wt | 可写模式 ,清空文件后写入 |
at | 可写模式,追加文本内容 |
rb | 以只读模式打开二进制文件 |
wb | 可写模式 ,清空文件后写入 |
ab | 可写模式,追加文本内容 |
with open("filename","r",encondig="utf8") as f: print(f.read())
with open()方法不只提供自动释放操做系统占用的方法,而且with open能够使用逗号分隔,一次性打开多个文件,实现文件的快速拷贝。操作系统
绝对路径指针
从盘符开始写一个完整的路径code
相对路径视频
相对于当前执行文件所在的文件夹的文件。对象
模式 | 描述 |
---|---|
r+ | 可读可写 |
w+ | 可读可写 |
a+ | 可读可写 |
不能建议同时使用可读可写的模式进行对文件的操做图片
一个字符 表示3个字节rem
一个英文字母表示1个字节it
打开文件模式要用二进制模式(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)