文件操作:
文件路径:d:文件名.txt
编码方式:utf-8、gbk
操作方式:只读、只写、追加、读写、写读...
只读:r 或 rb
#相对路径
f=open("文件名",mode="r",encoding="utf-8") #打开 content=f.read() #读 print(content) f.close() #关闭
#绝对路径
f=open("f:gaoya.txt",mode="r",encoding="gbk") #打开 content=f.read() #读 print(content) f.close() #关闭
绝对路径注意点:
1)、以什么编码方式储存的文件,就以什么编码方式打开,以免报错。
2)、隐藏文件类型的扩展名不需要追加。
f = open('文件名',mode='rb',) content = f.read() print(content) f.close()
rb注意:非文字类型或文件的上传下载。
只写 w 或wb
#对于w:没有此文件就会创建文件 f = open('log',mode='w',encoding='utf-8') f.write('文件内容') f.close() # 先将源文件的内容全部清除,再写。 f = open('log',mode='w',encoding='utf-8') f.write('文件内容') f.close()
注意:W:没有此文件就会创建,有则删除原文件内容,再添加新内容。
f = open('log',mode='wb') #已表明bytes类型,不用写编码类型 f.write('文件内容'.encode('utf-8')) f.close()
追加: a 或ab
f = open('log',mode='a',encoding='utf-8') f.write('文件内容') f.close()
f = open('log',mode='ab') f.write('文件内容'.encode('utf-8')) f.close()
读写 r+ 或 r+b(比较常用)
f = open('log',mode='r+',encoding='utf-8') print(f.read()) f.close()
f = open('log',mode='r+b') print(f.read()) f.write('大猛,小孟'.encode('utf-8')) f.close()
r+注意:读写正常,先读后追加
写读,从头开始,写多少占多少位
写读:w+
f = open('log',mode='w+',encoding='utf-8') f.write('aaa') #先写 f.seek(0) #光标移到最前 print(f.read()) #后读 f.close()
注意:全部去除,再添加
追加 a+
f = open('log',mode='a+',encoding='utf-8') f.write('文件内容') f.seek(0) print(f.read()) f.close()
功能详解
obj = open('log',mode='r+',encoding='utf-8') content = f.read(3) # 读出来的都是字符 打印前三个字符 f.seek(3) # 是按照字节定光标的位置 三个字节一个字,从第二个字开始 f.tell() #告诉你光标的位置 print(f.tell()) content = f.read() print(content) f.tell() #知道光标位置 f.seek(count-9) #打印后三个字 f.readable() # 是否可读 line = f.readline() # 一行一行的读 line = f.readlines() # 每一行当成列表中的一个元素,添加到list中 f.truncate(4) for line in f: print(line) f.close()
注意:必须一行一行读,截取读
最后加close
另一种写法:
with open('log',mode='r+',encoding='utf-8') as f, open('log',mode='w+',encoding='utf-8') as f1: #可打开多个文件 f.read() print(f.read()) #不用写close
例题1:注册、登录
username = input('请输入你要注册的用户名:') password = input('请输入你要注册的密码:') with open('list_of_info',mode='w',encoding='utf-8') as f: f.write('{} {}'.format(username,password)) print('恭喜您,注册成功') lis = [] i = 0 while i < 3: usn = input('请输入你的用户名:') pwd = input('请输入你的密码:') with open('list_of_info',mode='r+',encoding='utf-8') as f1: for line in f1: lis.append(line) if usn == lis[0].strip() and pwd == lis[1].strip(): print('登录成功') break else:print('账号和密码错误') i+=1
例题2:将文件中的星儿替换为阿娇
with open('小护士班主任',encoding='utf-8') as f,open('小护士班主任.bak','w',encoding='utf-8') as f2: for line in f: if '星儿' in line: #班主任:星儿 line = line.replace('星儿','阿娇') #写文件 f2.write(line) #小护士:金老板 import os os.remove('小护士班主任') #删除文件 os.rename('小护士班主任.bak','小护士班主任') #重命名文件
注意:替换原文件的内容,写一个与原文件内容相同的新文件,然后删除旧文件,将新文件重命名为原文件的 名字。
修改文件的步骤:读---写---删---重命名
概括:
文件处理 打开文件 open('路径','打开方式','指定编码方式') 打开方式 r w a r+ w+ a+ b r+ 打开文件直接写 和读完再写 编码方式 —— utf-8 操作文件 读 read 一次性读 readlines 一次性读 readline 一行一行读 不知道在哪儿结束 视频 图片 rb bytes 按照字节读 for循环 —— 最好!!! 写 write 光标 —— 文件指针 seek _ 指定光标移动到某个位置 tell _ 获取光标当前的位置 truncate _ 截取文件 关闭文件 close
编码/解码
#str --->byte encode 编码 s = '二哥' b = s.encode('utf-8') print(b) #byte --->str decode 解码 s1 = b.decode('utf-8') print(s1)
s = 'abf' b = s.encode('utf-8') print(b) #byte --->str decode 解码 s1 = b.decode('gbk') print(s1)