Day8 文件处理
文件处理
文件操作初识
文件路径:d:ake.txt
编码方式:utf-8,gbk,GB2312....
操作方式:只读,只写,写读,读写,追加 等。
报错原因:
UnicodeDecodeError: 'gb2312' codec can't decode byte 0xa6 in position 2: illegal multibyte sequence
编码不一致,存储文件时编码与打开文件时编码不一致。
r'd:\ake.txt ‘ 路径问题
1,在路径的最前面,+ r
2,每个\ 变成 \\
绝对路径: d:\ake.txt 从根目录开始找
相对路径: 当前目录,当前文件夹。
读:
r 只读模式
read 一次性都读出来 f =open("ake",encoding="utf-8",mode="r") content = f.read(5) # 读取文件里的5个字符 print(content) f.close() readline 按行读取 f = open("ake",encoding="utf-8",mode="r") print(f.readline()) # 打印第一行字符串 f.close() readlines 按行读出来,并将其放在一个列表中 f = open("ake",encoding="utf-8",mode="r") content = f.readlines() for i in range(len(content)): # 循环列表 content[i] = content[i].strip() # 通过索引去掉每个元素的空格跟换行符 print(content) f.close()
for循环
f = open("文件操作1",encoding="utf-8") for i in f: print(i.strip()) f.close()
r+ 读写模式
rb 文件凡是操作带b字母,都是与非文字类文件相关的
f = open(r"D:\Qishijihua\视频\day08\day08\美女1.jpg",mode="rb") # r 为转义字符 content = f.read() print(content) f.close() f = open("文件操作1",encoding="utf-8",mode="r+") content = f.read() # 先读 print(content) f.write("666") # 再写 f.close() # 如果不读直接写会覆盖
写
w 写模式,没有文件创建文件也要写
wb 非文字类写入
w+ 读写,先读后写
w f = open("种子.txt",encoding="utf-8",mode="w") f.write("www.hao123.com") f.close() wb f = open(r"D:\Qishijihua\视频\day08\day08\美女1.jpg",mode="rb") content = f.read() print(content) f1 = open("美女2.jpg",mode="wb") f1.write(content) f.close() f1.close() w+ f = open("ake",encoding="utf8",mode="w+") f.write("我爱python") content = f.read() print(content) f.close()
追加
a 没有文件创建文件也要写。有文件直接在文件后面追加
a+ 写读
a f = open("文件操作",encoding="utf-8",mode="a") f.write("\n我爱北京天安门") f.close() a+ f = open("文件操作",encoding="utf-8",mode="a+") content = f.write("\n天安门上太阳升") print(content) f.close()
改
1,以读的模式打开原文件,产生一个文件句柄f1.
2,以写的模式创建一个新文件,产生一个文件句柄f2.
3,读取原文件内容,进行修改,并将修改后的写入新文件。
4,将原文件删除。
5,将新文件重命名成原文件。
import os with open('ake','r',encoding='utf-8') as f1,\ open("ake.bak",'w',encoding='utf-8') as f2: con=f1.read() new_con=con.replace("的",'得') f2.write(new_con) os.remove("ake") os.rename('ake.bak','ake') import os with open('alex.txt','r',encoding='utf-8') as f14,\ open('alex.bak','w',encoding='utf-8') as f15: for line in f14: line.replace('alex','SB') f15.write(line) os.remove('alex.txt') os.rename('alex.bak','alex.txt')
其他方法:
1,seek 调整光标,seek(0)调整到开始,seek(0,2)调整到结尾。按字节移动
2,readale 是否可读
3,writable 是否可写
4,with 主动关闭文件句柄
5,os.remove 删除文件名
6,os.rename 修改文件名
7. truncate 截取
r+ a+ ..不能在w模式下使用,对原文件进行截取 f=open('ake','r+',encoding='utf-8') f.truncate(9) #字节 f.close()