-----------------------------------01 可读可写.py-----------------------------------#r+t:可读、可写 #w+t:可写、可读with open(‘b.txt‘,‘w+t‘,encoding=‘utf-8‘) as f:# print(f.readable())# print(f.writable())#a+t:可追加写、可读 #r+b#w+b#a+b with open(‘b.txt‘,mode=‘rb‘) as f:# data=f.read()# print(data.decode(‘utf-8‘)) with open(‘b.txt‘,mode=‘rt‘,encoding=‘utf-8‘) as f:# data=f.read()# print(data) with open(‘a.txt‘,mode=‘r+‘,encoding=‘utf-8‘) as f: print(f.readline()) print(f.readline()) f.write(‘小红帽‘) ---------------------------------02 控制文件指针移动.py--------------------------------- f.seek(offset,whence)#offset代表文件的指针的偏移量,单位是字节bytes#whence代表参考物,有三个取值#0:参照文件的开沟#1:参照当前文件指针所在位置#2: 参照文件末尾#ps:快速移动到文件末尾f.seek(0,2) #强调:其中whence=1和whence=2只能在b模式下使用f=open(‘c.txt‘,mode=‘rt‘,encoding=‘utf-8‘)# # f.seek(9,0)print(f.tell()) # 每次统计都是从文件开头到当前指针所在位置# # print(f.readline())#f.close() f=open(‘c.txt‘,mode=‘rb‘)f.readline()f.seek(6,1)print(f.readline().decode(‘utf-8‘))print(f.tell())f.close() f=open(‘c.txt‘,mode=‘rb‘)f.seek(-9,2)print(f.readline().decode(‘utf-8‘))print(f.tell())f.close() 了解(**)只有在t模式下的read(n),n代表的是字符个数,除此之外其他但凡涉及文件指针的移动都是以字节为单位的f=open(‘c.txt‘,mode=‘rt‘,encoding=‘utf-‘)print(f.read(3))f.close() f=open(‘c.txt‘,mode=‘rb‘,)print(f.read(3).decode(‘utf-8‘))f.close() ab a+b r+bf=open(‘b.txt‘,mode=‘at‘,)f.truncate(9) # 参照物永远是文件开头f.close() -----------------------------------03 文件修改.py----------------------------------- with open(‘c.txt‘,‘r+t‘,encoding=‘utf-8‘) as f:# f.seek(21,0)# f.write(‘[我擦勒]‘) #修改文件内容的方式一:#思路:先将原文件内容一次性全部读入内存,然后在内存修改完毕后,再#覆盖写回原文件#优点:在修改期间,文件内容只有一份#缺点:当文件过大的情况下或占用过多的内存空间 with open(‘d.txt‘,‘rt‘,encoding=‘utf-8‘) as read_f:# msg=read_f.read()# msg=msg.replace(‘alex‘,‘xiang‘)# # print(msg)#with open(‘d.txt‘,‘wt‘,encoding=‘utf-8‘) as write_f:# write_f.write(msg) #修改文件内容的方式二:#思路:#1、以读的方式打开原文件,以写的方式打开一个新文件#2、从原文件中循环读取每一行内容修改后写入新文件#3、删除原文件,将新文件重命名为原文件的名字 #优点:同一时刻只有一行内容存在于内存中#缺点:在修改期间,文件内容始终存在两份,但修改完毕后会只留一份import oswith open(‘d.txt‘,‘rt‘,encoding=‘utf-8‘) as read_f,\ open(‘d.txt.swap‘,‘wt‘,encoding=‘utf-8‘) as write_f: for line in read_f: write_f.write(line.replace(‘xiang‘,‘ALEXSB‘)) os.remove(‘d.txt‘) # 删除老文件os.rename(‘d.txt.swap‘,‘d.txt‘)---------------------------------04 函数的基本使用.py----------------------------------‘‘‘ 注册功能uname=input(‘username>>:‘).strip()pwd1=input(‘password>>: ‘).strip()pwd2=input(‘重复输入密码>>: ‘).strip()if pwd1 == pwd2: with open(‘db.txt‘,‘at‘,encoding=‘utf-8‘) as f: f.write(‘%s:%s\n‘ %(uname,pwd1)) f.flush() #认证功能inp_uname=input(‘请输入你的账号:‘).strip()inp_pwd=input(‘请输入你的密码:‘).strip()with open(‘db.txt‘,‘rt‘,encoding=‘utf-8‘) as f: for line in f: info=line.strip(‘\n‘).split(‘:‘) if inp_uname == info[0] and inp_pwd == info[1]: print(‘login successfull‘) break else: print(‘账号或密码错误‘) 注册功能uname=input(‘username>>:‘).strip()pwd=input(‘password>>: ‘).strip()with open(‘db.txt‘,‘at‘,encoding=‘utf-8‘) as f: f.write(‘%s:%s\n‘ %(uname,pwd)) f.flush() 注册功能uname=input(‘username>>:‘).strip()pwd=input(‘password>>: ‘).strip()with open(‘db.txt‘,‘at‘,encoding=‘utf-8‘) as f: f.write(‘%s:%s\n‘ %(uname,pwd)) f.flush() #认证功能inp_uname=input(‘请输入你的账号:‘).strip()inp_pwd=input(‘请输入你的密码:‘).strip()with open(‘db.txt‘,‘rt‘,encoding=‘utf-8‘) as f: for line in f: info=line.strip(‘\n‘).split(‘:‘) if inp_uname == info[0] and inp_pwd == info[1]: print(‘login successfull‘) break else: print(‘账号或密码错误‘) ‘‘‘ ‘‘‘1、什么是函数? 在程序中,函数就具备某一功能的工具事先将工具准备好即函数的定义遇到应用场景拿来就用即函数的调用所以务必记住:#函数的使用必须遵循先定义,后调用的原则 2、为何要用函数 不用函数问题是: 1、程序冗长 2 程序的扩展性差 3 程序的可读性差 3 如何用函数: 函数的使用必须遵循先定义,后调用的原则‘‘‘def 函数名(参数1,参数2,...):# ‘‘‘# 函数功能的描述信息# :param 参数1: 描述# :param 参数2: 描述# :return: 返回值# ‘‘‘# 代码1# 代码2# 代码3# ...# return 返回值 准备好工具=>函数的定义阶段def register(): while True: uname=input(‘username>>:‘).strip() if uname.isalpha(): break else: print(‘用户名必须由字母组成傻叉‘) while True: pwd1=input(‘密码>>: ‘).strip() pwd2=input(‘重复输入密码>>: ‘).strip() if pwd1 == pwd2: break else: print(‘两次输入的密码不一致,眼瞎吗‘) with open(‘db.txt‘,‘at‘,encoding=‘utf-8‘) as f: f.write(‘%s:%s\n‘ %(uname,pwd1)) f.flush() def auth(): #认证功能 inp_uname=input(‘请输入你的账号:‘).strip() inp_pwd=input(‘请输入你的密码:‘).strip() with open(‘db.txt‘,‘rt‘,encoding=‘utf-8‘) as f: for line in f: info=line.strip(‘\n‘).split(‘:‘) if inp_uname == info[0] and inp_pwd == info[1]: print(‘login successfull‘) break else: print(‘账号或密码错误‘) 拿来就用=>函数的调用阶段print(register)register()auth()register()register()register()-------------------------------05 函数的定义阶段与调用阶段.py-------------------------------函数的使用必须遵循先定义,后调用的原则,没有事先定义函数,而直接引用函数名,就相当于在引用一个不存在的变量名 #1、函数定义阶段:只检测函数体的语法,不执行函数体代码def func():# print(‘1111‘)# print(‘222‘)# print(‘333‘) #2、函数调用阶段:执行函数体代码func() 例1def foo():# print(‘from foo‘)# bar()#foo() 例2def bar():# print(‘from bar‘)#def foo():# print(‘from foo‘)# bar()#foo() # # 例3def foo():# print(‘from foo‘)# bar()#def bar():# print(‘from bar‘)#foo() 例4def foo():# print(‘from foo‘)# bar()#foo()#def bar():# print(‘from bar‘)--------------------------------06 函数的定义的三种形式.py-------------------------------- #定义函数时的参数就是函数体接收外部传值的一种媒介,其实就一个变量名 #1、无参函数:在函数定义阶段括号内没有参数,称为无参函数注意:定义时无参,意味着调用时也无需传入参数应用:#如果函数体代码逻辑不需要依赖外部传入的值,必须定义无参函数 def func():# print(‘hello world‘)func() #2、有参函数在函数定义阶段括号内有参数,称为有参函数注意:定义时有参,意味着调用时也必须传入参数应用:#如果函数体代码逻辑需要依赖外部传入的值,必须定义成有参函数def sum2(x,y):# # x=10# # y=20# res=x+y# print(res)#sum2(10,20)sum2(30,40) def check_user(): while True: uname=input(‘username>>:‘).strip() if uname.isalpha(): return uname # break else: print(‘用户名必须由字母组成傻叉‘) def check_pwd(): while True: pwd1=input(‘密码>>: ‘).strip() pwd2=input(‘重复输入密码>>: ‘).strip() if pwd1 == pwd2: return pwd1 else: print(‘两次输入的密码不一致,眼瞎吗‘) def db_hanle(uname,pwd1): with open(‘db.txt‘,‘at‘,encoding=‘utf-8‘) as f: f.write(‘%s:%s\n‘ %(uname,pwd1)) f.flush() def register(): # 检测用户名是否合法 x=check_user() #x=‘EGON‘ # 检测密码是否合法 y=check_pwd() #y=‘123‘ # 写入数据文件 # db_hanle(合法的用户名,合法的密码) db_hanle(x,y) register() #3、空函数 def func():# pass def check_user(): pass def check_pwd(): pass def write_db(x,y): pass def register(): #1 输入用户名,并进行合法性校验 #2 输入密码,并进行合法性校验 #3 将合法的用户名、密码写入文件 x=check_user() y=check_pwd() write_db(x,y)
原文地址:https://www.cnblogs.com/zhangmingyan/p/9142570.html
时间: 2024-10-11 04:19:33