老男孩python全栈day8
文件操作
编码方式:utf-8 gbk......
操作方式:只读,只写,追加,读写,写读。。。 以什么编码方式打开文件,就以什么编码方式进行操作
只读:
r
f = open('d:\模特主妇护士班主任.txt',mode='r',encoding='UTF-8')
content = f.read()
print(content,type(content)) #str
f.close()
rb bytes类型 用于非文字的文件
f = open('模特主妇护士班主任',mode='rb',) #默认encoding方式
content = f.read()
print(content)
f.close()
只写:
w 如果没有此文件,创建;如果有此文件,覆盖原文件写入
f = open('log',mode='w',encoding='utf-8')
f.write('骑兵步兵')
f.close()
wb
f = open('log',mode='wb') #打开默认bytes
f.write('附近看到类似纠纷'.encode('utf-8')) #写入必须加编码方式
f.close()
追加:
a 在原文件光标出追加
f = open('log',mode='a',encoding='utf-8')
f.write('佳琪')
f.close()
ab
f = open('log',mode='ab')
f.write('佳琪'.encode('utf-8'))
f.close()
读写:
r+ (最最常用)
# 先读后写
f = open('log',mode='r+',encoding='utf-8')
print(f.read())
f.write('大猛,小孟') #在原文件后面继续写入
f.close()
# 先写后读
f = open('log',mode='r+',encoding='utf-8')
f.write('大猛,小孟') #原文件内容从第一个位置开始覆盖,覆盖的长度为写入的长度
print(f.read()) #显示的是未覆盖的内容
f.close()
r+b
f = open('log',mode='r+b')
print(f.read())
f.write('大猛,小孟'.encode('utf-8')) #这里注意就好
f.close()
写读:
w+
f = open('log',mode='w+',encoding='utf-8') #先创建文件
f.write('aaa')
f.seek(0) ##必须加入此操作,不然读不出来,#调节光标 从某个字节处开始读
print(f.read())
f.close()
w+b 不再赘述
功能详解
obj = open('log',mode='r+',encoding='utf-8')
content = f.read(3) # 读出来的都是字符 读三个字符
f.seek(3) # 按照字节设置光标的位置 光标在3个字节处 一个中文3个字节
f.tell() 告诉你光标的位置
print(f.tell())
f.readable() # 是否刻度
line = f.readline() # 一行一行的读
line = f.readlines() # 每一行当成列表中的一个元素,添加到list中
f.truncate(4) #截取前4个字符 覆盖文件 其实就是除了前4个字符,删除后面的
for line in f:
print(line) #按行打印,会将回车\n也打印进去
f.close()
## 一下的功能是读取指定位置的字符
f = open('log',mode='a+',encoding='utf-8')
f.write('佳琪')
count = f.tell() #光标的位置
f.seek(count-9) #将光标设为倒数三个字前(三个字节代表一个汉字)
print(f.read(2)) #从光标处开始读两个字符 也就是读两个汉字
f.close()
## with可以打开多个文件
with open('log',mode='r+',encoding='utf-8') as f,\
open('log',mode='w+',encoding='utf-8') as f1:
open()默认读取方式是r,默认编码方式是跟操作系统相匹配,一般是gbk
读的方式:
read 一次性读
readlines 一次性读,按行切分
readline 一行一行读,但是不知道在哪儿结束,视频 图片 rb bytes 按照字节读
for循环 —— 最好了!!! for line in f:
光标 —— 文件指针
seek -- 指定光标移动到某个位置
tell -- 获取光标当前的位置
truncate -- 截取文件
实践:
修改文件:读一个、写一个、删一个、重命名
# 修改文件
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','小护士班主任') #重命名文件
简单的注册、登陆
username = input('请输入你要注册的用户名:')
password = input('请输入你要注册的密码:')
with open('list_of_info',mode='w',encoding='utf-8') as f:
f.write('{}\n{}'.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(): ### 读出来的会有回车 strip()将其去掉
print('登录成功')
break
else:print('账号和密码错误')
i+=1