文件的基本操作
1. 什么是文件? 操作系统暴露给用户操作硬盘的接口 2. 如何操作文件? # 代码如何操作文件 三步骤: 1. 使用open打开文件 2. 使用相关方法操作文件 3. 关闭文件 ''' 路径: 相对路径 绝对路径 ''' # 1. 如何操作文件 # r => read # 1.1 打开文件, 操作系统打开的文件 f = open('a.txt', 'r', encoding='utf-8') # 1.2 读取文件内容 print(f.read()) # print(f) # 1.3 关闭文件 f.close() ''' 当路径写成绝对路径时候,路径中有斜杠出现时候,在路径前面加个r r'E:\python21\day10\a.txt' ''' # 为了每次不想自己手动关闭文件,python提供了一个简便方法 # with上下文管理器 # f = open(r'a.txt', 'r', encoding='utf-8') with open(r'a.txt', 'r', encoding='utf-8') as f: ''' 1. f = open() 2. f.close() => 当with代码块中代码执行完毕,会自动执行f.close() ''' print(f.read())
文件的读写模式
1. r: read (读) 2. w:write (写) 3. a:append (追加) ###########################read###################################################### # 1. 读:r # 路径不存在,会报错 # with open('b.txt', mode='r', encoding='utf-8', ) as f: # pass # 1.1 读:r # 路径存在直接读取 # 模式指定r,不能向文件中写内容 with open('a.txt', mode='r', encoding='utf-8', ) as f: # print(f.read()) # f.write('aaaaa') pass ############################write##################################################### # 写:w # 如果路径不存在,会创建出来一个新的路径 # with open('b.txt', mode='w', encoding='utf-8', ) as f: # pass # 如果路径存在,1. 会把文件内容清空,2. 在执行写操作 with open('a.txt', mode='w', encoding='utf-8', ) as f: f.write('aaaaa') ##########################append####################################################### # a:append(追加) # 路径不存在,会创建出来一个新的路径 # a:在问价你的末尾添加新内容 with open('a.txt', mode='a', encoding='utf-8', ) as f: f.write('bbbbbb')
文件相关操作的方法
# 1. 读相关的方法 # with open('a.txt', 'r', encoding='utf-8') as f: # print(f.read()) # print(f.readable()) # 查看文件是否可读 # print(f.readline()) # 逐行读取文件 # print(f.readlines()) # 把文件中的每一行当成一个元素放在了列表中 # pass # 2. 写相关的方法 with open('a.txt', 'w', encoding='utf-8') as f: # f.write('aaaaaa\n') # print(f.writable()) # print(f.readable()) # f.writelines(['aaa\n', 'bbbb\n', 'cccc', 'ddddd']) pass
文件的优化操作
with open('a.txt', 'r', encoding='utf-8') as f1: # print(f.read()) # 容易造成内存爆满 print('================>') # print(f.read()) ''' 容易造成内存爆满 如何解决上述问题? 逐行读取内容 ''' # for line in f1: # print(line) # 一行一行读取 # f1.flush() # 把内存中的数据立刻刷新到硬盘中 pass
文件相关的练习题
1. 写一个简易版本的注册功能和登录功能 写入文件的数据格式:jason|123 ''' 截止目前,文件中只能写字符串 ''' # 1. 让用户输入用户名和密码 username = input('请输入用户名:').strip() password = input('请输入密码:').strip() # 2. 组装用户名和密码成:jason|123 data = '%s|%s' % (username, password) print(data) # jason|123 # 3. 写入文件 with open('userinfo.txt', 'w', encoding='utf-8') as f: f.write(data) 2. 登录功能 # 登录功能 # 1. 输入用户名和密码 username = input('请输入用户名:').strip() password = input('请输入密码:').strip() # 2. 验证用户名和密码是否正确 with open(r'userinfo.txt', 'r', encoding='utf-8') as f: # print(type(f.read())) # jason|123 data = f.read() # jason|123 ''' with代码块中的data也可以在外面使用 ''' real_username, real_pwd = data.split('|') # print(real_username, len(real_username)) # print(real_pwd, len(real_pwd)) # 3. 判断用户名和密码是正确 if real_username == username and password == real_pwd: print('登录成功') else: print('用户名或者密码错误')
多用户注册
####################################### 多用户注册功能#################################### while True: # 1. 让用户输入用户名和密码 username = input('请输入用户名:').strip() password = input('请输入密码:').strip() # 结束代码 if username == 'q': break # 2. 组装用户名和密码成:jason|123 data = '%s|%s\n' % (username, password) print(data) # jason|123 # 3. 读取用户名和密码,校验用户名是否已经存在 with open('userinfo.txt', 'r', encoding='utf-8') as f: # data = f.read() for line in f: # line => jason|123 real_name, real_pwd = line.split('|') if username == real_name: print('用户名已经存在') break else: with open('userinfo.txt', 'a', encoding='utf-8') as f1: f1.write(data) ####################################### 多用户登录功能#################################### while True: # 1. 输入用户名和密码 username = input('请输入用户名:').strip() password = input('请输入密码:').strip() # 2. 读取文件数据,比较用户名和密码 with open('userinfo.txt', 'r', encoding='utf-8') as f: for line in f: # line => jason|123 real_name, real_pwd = line.split('|') # ['jason', '123\n'] ''' 记住:密码末尾有换行符,别忘记去掉之后再进行比较 ''' if real_name == username and password == real_pwd.strip('\n'): print('登录成功') break else: print('用户名或者密码错误')
代码整合
# 代码整合 while True: print(""" 1. 注册功能 2. 登录功能 """) # 1. 让用户输入操作的序号 choice = input('请输入操作的序号:').strip() if choice == '1': # 注册功能 # 1. 让用户输入用户名和密码 username = input('请输入用户名:').strip() password = input('请输入密码:').strip() # 结束代码 if username == 'q': break # 2. 组装用户名和密码成:jason|123 data = '%s|%s\n' % (username, password) print(data) # jason|123 # 3. 读取用户名和密码,校验用户名是否已经存在 with open('userinfo.txt', 'r', encoding='utf-8') as f: # data = f.read() for line in f: # line => jason|123 real_name, real_pwd = line.split('|') if username == real_name: print('用户名已经存在') break else: with open('userinfo.txt', 'a', encoding='utf-8') as f1: f1.write(data) elif choice == '2': # 1. 输入用户名和密码 username = input('请输入用户名:').strip() password = input('请输入密码:').strip() # 2. 读取文件数据,比较用户名和密码 with open('userinfo.txt', 'r', encoding='utf-8') as f: for line in f: # line => jason|123 real_name, real_pwd = line.split('|') # ['jason', '123\n'] ''' 记住:密码末尾有换行符,别忘记去掉之后再进行比较 ''' if real_name == username and password == real_pwd.strip('\n'): print('登录成功') break else: print('用户名或者密码错误')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY