文件操作补充
1.flush()
将内存中的数据立刻刷到硬盘 相当于ctrl+s
2.readable() writeable()
判断文件是否可读可写
with open(r'userinfo.txt','a',encoding='utf8') as f:
print(f.readable()) # True
print(f.writable()) # False
3.writelines()
括号内放列表 多个元素都会被依次写入
光标移动
seek可以控制光标移动
seek(offset,whence)
offset用来控制移动的位数(可以是负数,正数表示向后移动后几位,负数表示向前移动几位)
whence是操作模式:
0:从文件开头开始移动
(既可以用在文本模式也可以用在二进制模式)
1:从光标当前位置开始移动
(只可以在二进制模式下使用)
2:从文件末尾开始移动
(只可以在二进制模式下使用)
二进制状态下移动的是字节数,utf8状态下:英文1字节,中文3字节
文件修改
方法一:用新的内容把原来的内容覆盖掉
with open(r'a.txt','r',encoding='utf8') as f:
data = f.read()
with open(r'a.txt','w',encoding='utf8') as f:
f.write(data.replace('jason','tony'))
方法二:创建一个新文件 将老文件内容写入新文件 过程中完成修改
之后将老文件删除 将新文件命名成老文件 从而达到修改的效果
import os
with open(r'a.txt','r',encoding='utf8') as f,open(r'a.txt.backend','w',encoding='utf8') as f1:
for line in f:
f1.write(line.replace('tony','jason'))
os.remove(r'a.txt')
os.rename(r'a.txt.backend',r'a.txt')
函数
函数就相当于是工具
提前定义好后续可以反复使用,避免了代码冗余的情况
eg:修理工需要用扳手,买了扳手之后就可以一直用,不用每次都买一把
函数的语法结构
def 函数名(参数1,参数2):
'''函数的注释'''
函数体代码
return 函数的返回值
1.def
定义函数的关键字
2.函数名
函数名的命名与变量名保持一致 见名知意
3.参数
函数在使用之前还可以接收外部传入的参数
4.函数的注释
类似于产品说明书
5.函数体代码
整个函数主要功能逻辑 是整个函数的核心
6.return
执行完函数之后可以给调用者一个反馈结果
函数的基本使用
函数的使用一定要先定义后使用!!!
如果在函数的代码前使用了该函数会报错
def get_info():
print(123)
get_info()
(get_info()就等于def get_info():后面的代码,即print(123))
登录界面
while True:
choice=input('注册1/登陆2:')
if choice=='1':
print('注册')
username=input('用户名:')
password=input('密码:')
with open(r'c.txt','r',encoding='utf8') as f:
for line in f:
username1=line.split('|')[0]
if username == username1:
print('用户名已被注册')
continue
else:
print('注册成功')
with open(r'c.txt','a',encoding='utf8') as f:
f.write('%s|%s\n'%(username,password))
continue
elif choice=='2':
print('登陆')
username2=input('用户名:')
password2=input('密码:')
with open(r'c.txt','r',encoding='utf8') as f:
for line in f:
username1,password1=line.split('|')
if username1==username2 and password1.strip('\n')==password2:
print('登陆成功')
break
else:
print('用户名或密码错误')
else:
print('?')
continue