Python学习路程——Day09

1|0Python学习路程——Day09

1|1文件操作

1|01、文件的概念

''' 操作系统为了使用户更好的使用计算机,而创建的一个快捷方式。 双击一个文件,相当于把硬盘的数据资源加载到内存中。 '''

1|02、打开文件的方法

''' 变量名 = open('文件路径', ’读写模式', encoding = 'utf8') 变量名.close ''' f = open(' ', ' ', encoding = 'utf8') print(f.read()) f.close() ''' with 上下文管理 with open('文件路径', ’读写模式', encoding = 'utf8') as f: print(f.read()) with上下文管理的好处在于: 当with的子代码结束后,自动调用close()方法,结束文件的调用。 也支持同时打开多个文件 文件路径:在程序处于同一个文件夹下,可以之间文件名+文件后缀打开,如果不在同一个文件夹下,需要写绝对路径打开。 注意: 由于\在代码中有特殊含义,故在写绝对路径前使用 r ''' with open(r'D:\示例.txt', 'r', encoding = 'utf8') as f: print(f.read())

3、文件读写模式

''' 'r': 只读:只能读不能写 'w':只写:只能写不能读 'a':只追加:文件末尾添加数据 '''

4、pass 和 ...

''' 只补全语法结构,没有实际含义 '''

5、文件操作模式

''' t 文本模式(rt、wt、at) 特点: 1、只能操作文本文件 2、读写都是以字符为单位 3、需要指定encoding参数,如果不采用使用计算机默认的编码 b 二进制模式(bytes模式)(rb、wb、ab) 不是默认的模式,需要指定 特点: 1、可以操作任何类型的文件 2、读写都是以字节(bytes)为单位 3、二进制模式、不需要指定编码参数 前面加b直接转为二进制,只有字母和数字 '''

6、编码、解码

''' 编码: res = '字符串' data = bytes(res, 'utf8') # encode() 解码: ret = str(data, '') '''

7、.read()方法

''' .rede()方法: 一次性读取文件内容,光标从头读到尾 在同一次的操作中,多次读取, 文件内容过大时,可能会造成内存溢出 read()括号内,可以填写数字,在文本模式下表示读取多少个字符。 '''

8、for循环读文件

''' 一行行读取文件内容 避免内存溢出现象的产生 '''

9、.readline()方法

''' 一次性读取所有文件内容,会根据行数组成列表 读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。 ''' ['study hard and make progress every day\n', 'study hard and make progress every day\n', 'study hard and make progress every day\n', '很开心见到了你']

10、.readable()方法

''' 判断文件是否具备读数据的能力会返回true和false '''

11、write()方法

''' 将字符串写入文件,返回的是写入的字符长度。 '''

12、writeable()方法

''' 判断文件是否具备写数据的能力true和false '''

13、writlines()方法

''' 向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。 '''

14、flush()方法

''' 刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。 '''

光标移动

with open(r'a.txt','rb')as f: print(f.read()) f.seek(0,0) print(f.read()) f.seek(0,0) print(f.read()) print(f.tell())#返回光标距离文件开头产生的字节数 seek(offset,whence) offset 是位移量 以字节为单位 whence 是模式 0 1 2 0是基于文件开头:文本和二进制模式都可以用 1是基于当前位置:二进制模式可以用 2是基于文件末尾:二进制模式可以用 使用encode 编码 decode 解码

练习:

1.编写简易版本的拷贝工具 自己输入想要拷贝的数据路径 自己输入拷贝到哪个地方的目标路径 任何类型数据皆可拷贝 ps:个别电脑C盘文件由于权限问题可能无法拷贝 换其他盘尝试即可 soure_file_path = input('拷贝文件路径').strip() target_file_path =input('目标路径').strip() with open(r'%s' % source_file_path, 'rb') as read_f, open(r'%s' % target_file_path, 'wb') as write_f: for line in read_f: writr_f.write(lin) 2.利用文件充当数据库编写用户登录、注册功能 文件名称:userinfo.txt 基础要求: 用户注册功能>>>:文件内添加用户数据(用户名、密码等) 用户登录功能>>>:读取文件内用户数据做校验 ps:上述功能只需要实现一次就算过关(单用户) 文件内始终就一个用户信息 拔高要求: 用户可以连续注册 用户可以多账号切换登录(多用户) 文件内有多个用户信息 ps:思考多用户数据情况下如何组织文件内数据结构较为简单 提示:本质其实就是昨天作业的第二道题 只不过数据库由数据类型变成文件 while True: print(""" 1.注册功能 2.登录功能 """) choice = input('请选择您想要执行的功能编号>>>:').strip() if choice == '1': username = input('please input your username>>>:').strip() password = input('please input your password>>>:').strip() # 2.校验用户名是否已存在 with open(r'userinfo.txt', 'r', encoding='utf8') as f: for line in f: # 'jason|123' real_name, real_pwd = line.split('|') if username == real_name: print('用户名已存在 无法完成注册') break # 一旦重复 没有必要继续往下校验是否重复了 直接结束循环 else: with open(r'userinfo.txt', 'a', encoding='utf8') as f1: f1.write(f'{username}|{password}\n') print(f'用户{username}注册成功') elif choice == '2': # 1.获取用户名和密码 username = input('please input your username>>>:').strip() # 'jason' password = input('please input your password>>>:').strip() # '123' # 2.打开文件读取内容并校验 with open(r'userinfo.txt', 'r', encoding='utf8') as f: for line in f: # 'jason|123\n' real_name, real_pwd = line.split('|') # 'jason' '123\n' if real_name == username and real_pwd.strip('\n') == password: print('登录成功') break else: print('用户名或密码错误') else: print('没有该功能编号')

__EOF__

本文作者少年奇妙游
本文链接https://www.cnblogs.com/HaiMan/p/16773357.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   负剑远游行归来仍少年  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

支付宝打赏