python-study-09
上节课复习
上节课复习 1、什么是文件 文件是操作系统为用户或应用程序提供的读写硬盘的虚拟单位 2、为何要有文件 永久保存数据 3、文件的基本操作 1、打开文件 2、读/写 3、关闭文件 f=open('a.txt',mode='r',encoding='utf-8') f.read() f.close() 上下文管理 with open('a.txt',mode='r',encoding='utf-8') as f,: 文件操作 .... 4、操作文件内容的两种格式 t:以字符串为单位操作文件内容,必须指定encoding,t模式只针对文本文件 b:以bytes为单位操作文件内容,一定不能指定encoding,b模式可以针对所文件 强调:不能单独使用,必须跟r或者w或者a连用 5、读写文件的模式: r:只读模式,文件不存在则报错,文件存在将指针跳到文件的首位 w:只写模式,文件不存在则创建空文件,文件存在则清空 a:只追加写模式,文件不存在则创建,文件存在将指针跳到文件的末尾 6、操作文件的方法 f.read() f.readline() f.readlines() f.write('hello\n') f.writelines(['hello\n','world\n']) 今日内容: +:可读、可写(**) 文件内指针的移动seek (****) 文件修改(*****) 函数的基本使用
文件可读可写
r+t:可读、可写w+t:可写、可读a+t:可追加写、可读r+bw+ba+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('小红帽') #加到了文件的末尾位置
控制文件指针移动
f.seek(offset,whence)offset代表文件的指针的偏移量,单位是字节byteswhence代表参考物,有三个取值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()
文件修改
with open('c.txt','r+t',encoding='utf-8') as f: f.seek(21,0) f.write('[我擦勒]')# 指针从文件开头移动21个字节,把后面的11个字节修改了,因为最后一个汉字只修改了一个字节所以导致乱码 修改文件内容的方式一:(针对小文件)思路:先将原文件内容一次性全部读入内存,然后在内存修改完毕后,再覆盖写回原文件优点:在修改期间,文件内容只有一份缺点:当文件过大的情况下或占用过多的内存空间 with open('d.txt','rt',encoding='utf-8') as read_f: msg=read_f.read() msg=msg.replace('alex','xiang') 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')
函数的基本使用
1、什么是函数?在程序中,函数就具备某一功能的工具事先将工具准备好即函数的定义遇到应用场景拿来就用即函数的调用所以务必记住:函数的使用必须遵循先定义,后调用的原则 2、为何要用函数 不用函数问题是: 1、程序冗长 2 程序的扩展性差 3 程序的可读性差 3 如何用函数: 函数的使用必须遵循先定义,后调用的原则'''# def 函数名(参数1,参数2,...):# '''# 函数功能的描述信息# :param 参数1: 描述# :param 参数2: 描述# :return: 返回值# '''# 代码1# 代码2# 代码3# ...# return 返回值
函数的定义阶段与调用阶段
函数的使用必须遵循先定义,后调用的原则,没有事先定义函数,而直接引用函数名,就相当于在引用一个不存在的变量名1、函数定义阶段:只检测函数体的语法,不执行函数体代码2、函数调用阶段:执行函数体代码 函数的定义的三种形式
定义函数时的参数就是函数体接收外部传值的一种媒介,其实就一个变量名 1、无参函数:在函数定义阶段括号内没有参数,称为无参函数注意:定义时无参,意味着调用时也无需传入参数应用:如果函数体代码逻辑不需要依赖外部传入的值,必须定义无参函数def func(): print('hello world')func() 2、有参函数在函数定义阶段括号内有参数,称为有参函数注意:定义时有参,意味着调用时也必须传入参数应用:如果函数体代码逻辑需要依赖外部传入的值,必须定义成有参函数def sum2(x,y): # x=10 # y=20 res=x+y print(res)sum2(10,20) 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)
作业
# 函数练习:# 1、写函数,,用户传入修改的文件名,与要修改的内容,执行函数,完成批了修改操作## 2、写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数## 3、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。## 4、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。## 5、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。## 6、写函数,检查字典的每一个value的长度, 如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。# dic = {"k1": "v1v1", "k2": [11, 22, 33, 44]}# PS:字典中的value只能是字符串或列表## 7、编写认证功能函数,注意:后台存储的用户名密码来自于文件## 8、编写注册功能函数,将用户的信息储存到文件中## 9、编写查看用户信息的函数,用户的信息是事先存放于文件中的 # 明日默写# 1、修改文件的两种方式# 2、注册功能# 3、认证功能
![](/assets/blank.gif)
![](/assets/blank.gif)
# 函数练习: # 1、写函数,,用户传入修改的文件名,与要修改的内容,执行函数,完成批了修改操作# 方式一:小文件修改 def change_file(file,old,new):with open(file,'rt',encoding='utf-8') as read_f:data = read_f.read()data = data.replace(old,new)with open(file,'wt',encoding='utf-8') as write_f:write_f.write(data)print('success') file_u = input('filename>>: ') old_u = input('old>>: ') new_u = input('new>>: ') change_file(file_u,old_u,new_u)# 方式二:大文件修改 def change_file(file,old,new):import osfile1 = file+'.swap'with open(file,'rt',encoding='utf-8') as read_f,\open(file1,'wt',encoding='utf-8') as write_f:for line in read_f:line = line.replace(old,new)write_f.write(line)os.remove(file)os.rename(file1,file)print('success') file_u = input('filename>>: ') old_u = input('old>>: ') new_u = input('new>>: ') change_file(file_u,old_u,new_u)# 2、写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数 def str_count():str_u = input('请输入>>: ')digit_count = 0alpha_count = 0space_count = 0other_count = 0for i in str_u:if i.isdigit():digit_count += 1elif i.isalpha():alpha_count += 1elif i.isspace():space_count += 1else:other_count += 1print('数字:%s 字母:%s 空格:%s 其他:%s' % (digit_count, alpha_count, space_count, other_count)) str_count()# 3、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。 def func3(seq):if len(seq) > 5:return Trueelse:return False print(func3([1,2,3,4,5,6])) # 4、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。 def func1(seq):if len(seq) > 2:return seq[0:2] print(func1([1,2,3,4])) # 5、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。 def func2(seq):return seq[::2] print(func2([1,2,3,4,5,6,7])) # 6、写函数,检查字典的每一个value的长度, 如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。 # dic = {"k1": "v1v1", "k2": [11, 22, 33, 44]} # PS:字典中的value只能是字符串或列表 dic = {"k1": "v1v1", "k2": [11, 22, 33, 44]} def func6(seq):for k in seq:if len(seq[k]) > 2:seq[k] = seq[k][:2]return seq print(func6(dic)) # 7、编写认证功能函数,注意:后台存储的用户名密码来自于文件 # def auth():name_inp = input('username>>: ').strip()pwd_inp = input('password>>: ')with open('db','rt',encoding='utf-8') as f:for line in f:line = line.strip('\n').split(':')if name_inp == line[0] and pwd_inp == line[1]:print('验证成功')breakelse:print('用户名或密码错误') auth() # 8、编写注册功能函数,将用户的信息储存到文件中 def func8():name_inp = input('username>>: ').strip()pwd_inp = input('password>>: ')pwd_inp2 = input('password>>: ')if pwd_inp == pwd_inp2:print('注册成功')with open('db','at',encoding='utf-8') as f1:f1.write('%s:%s\n' %(name_inp,pwd_inp))else:print('两次密码不一致') func8() # 9、编写查看用户信息的函数,用户的信息是事先存放于文件中的 def func9():name = input('username>>: ').strip()with open('db','rt',encoding='utf-8') as f:for line in f:line = line.strip('\n').split(':')if name == line[0]:print(line)breakelse:print('用户不存在') func9() # 明日默写 # 1、修改文件的两种方式 with open('db','rt',encoding='uf-8') as read_f:data = read_f.read()data = data.replace('old','new') with open('db','wt',encoding='utf-8') as write_f:write_f.write(data)import os with open('db','rt',encoding='utf-8') as f2,\open('db.swap','wt',encoding='utf-8') as f3:for line in f2:f3.write(line.replace('old','new')) os.remove('db') os.rename('db.swap','db') # 2、注册功能 name_inp = input('username>>: ').strip() pwd_inp = input('password>>: ') pwd_inp2 = input('password>>: ') if pwd_inp == pwd_inp2:with open('db','at',encoding='utf-8') as f:f.write('%s:%s\n' %(name_inp,pwd_inp)) # 3、认证功能 name_inp = input('name>>: ').strip() pwd_inp = input('password>>: ') with open('db','rt',encoding='utf-8') as f:for line in f:line = line.strip('\n').split(':')if name_inp == line[0] and pwd_inp == line[1]:print('验证通过')breakelse:print('用户名或密码错误')
View Code
转载于:https://www.cnblogs.com/xujinjin18/p/9139961.html
python-study-09相关推荐
- python进阶09并发之五生产者消费者
原创博客地址:python进阶09并发之五生产者消费者 这也是实际项目中使用较多的一种并发模式,用Queue(JoinableQueue)实现,是Python中最常用的方式(这里的queue特指mul ...
- python 堆叠柱状图 多列 复杂_[Python Study Notes]堆叠柱状图绘制
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...
- [Python Study Notes]正则表达式
正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re 模块使 P ...
- [Python Study Notes] Python的安装
Windows: 1.下载安装包: 转到Python官网https://www.python.org/downloads/ ,下载最新版本的Python. 2.安装 安装到自定义的安装路径下. 3. ...
- Python进阶09 filter函数
2019独角兽企业重金招聘Python工程师标准>>> def func(a):if a > 100:return Trueelse:return False'''filter ...
- Python进阶09 动态类型
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 谢谢TeaEra, 猫咪cat 动态类型(dynamic typing)是Pyth ...
- Python基础09 面向对象的进一步拓展
我们熟悉了对象和类的基本概念.我们将进一步拓展,以便能实际运用对象和类. 调用类的其它信息 上一讲中提到,在定义方法时,必须有self这一参数.这个参数表示某个对象.对象拥有类的所有性质,那么我们可以 ...
- [Python Study Notes]电池信息
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...
- [Python Study Notes]进程信息(丁丁软件监控进程,http-post)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...
- 【Python】09 数值内插
目的 2022/5/4 本地目录:E:\Projects\names\xl\interpt 用Python实现数值内插 原理 线性内插 根据频率,线性内插坡度. 结果 -0.060078662 -0. ...
最新文章
- MalformedObjectNameException: Invalid character '' in value part of property
- 【转载】YOLOV详解
- Effective C++ --2 构造/析构/赋值运算
- linux设备驱动模型之 kset原理与实例分析
- IO多路转接之epoll
- pullToRefresh下拉刷新上拉加载
- C语言作业不足之处,C语言和汇编语言的优缺点分析-控制器/处理器-与非网
- Python+django网页设计入门(19):创建新模型扩展自带用户表的字段
- css3 之弹性布局
- PDF处理控件Spire.PDF热门问题解答
- vs2005安装opengl
- 马斯克是全人类的?他旗下有9家公司,特斯拉被评为最没技术含量
- 程序员的精确思维,左手数学右手编程
- Ubuntu19下隐藏桌面图标
- 烟雨峨眉金顶观日出第一次近距离与这座群山环保的小城接触
- 数仓01-概念的理解和方法论
- 用python语言绘制美丽图形
- 【许晓笛】EOS 什么是智能合约(3)
- 如何画热图(heatmap)
- 计算机博士论文 评阅意见,博士论文评阅意见