python 文件操作+例题
内容概要
- 文件操作的相关方法
- 文件操作模式
- 文件操作代码练习题
- 文件内光标的移动及文件修改
内容详细
文件操作方法
# 文件操作方法
# 读系列
with open(r'a.txt', 'r', encoding='utf8') as f:
# print(f.read()) # 一次性读取文件内所以的内容
# print(f.readline()) # 每次都读文件一行内容
# print(f.readlines()) # 读取文件所有内容 组织成列表 每个元素是文件的每行内容
# print(f.readable()) # 判断当前文件是否具备读的能力
# 写系列
with open(r'a.txt', 'w', encoding='utf8') as f:
# f.write('奥利给!') # 往文件内写入文本内容
# f.write(123) # 写入的内容必须是字符串类型
# f.write(['zhang', 'zhao', 'yang']) # 可以将列表中多个字符串元素全部写入
# print(f.writable()) # True
# print(f.readable()) # False
# f.flush() # 直接将内存内数据刷到硬盘 相当于Ctrl+s
文件优化操作
with open(r'a.txt', 'r', encoding='utf8') as f:
print(f.read()) # 一次性读取文件内的所有内容
print(f.read()) # 一次性读取文件内的所有内容
print(f.read()) # 一次性读取文件内的所有内容
'''
1.一次性读完以后 光标停在了文件末尾 无法再次读取内容
2.该方法在读取大文件的时候 可能会造成内存溢出的情况
解决上述问题的方法就是逐行读取文件内容
'''
# for line in f: # 文件变量名f支持for循环 相当于一行行读取文件内容
'''
以后涉及到多行文件内容的情况一般都是采用for循环读取
'''
例题讲解
简易版本的注册、登陆功能
普通要求(实现一次即可)
1.注册功能
获取用户名和密码组织成你喜欢的样子写入文件即可
2.登陆功能
密码然后比对是否与文件内用户数据一致
进阶版:
多用户注册
# 多用户注册
while True:
# 1.获取用户用户名和密码
username = input('username>>>:').strip()
password = input('password>>>:').strip()
# 2.将用户名和密码组织成一个字符串
data = '%s|%s\n' % (username, password)
# 2.1.判断用户名是否已存在
with open(r'userinfo.txt', 'r', encoding='utf8') as f1:
# 2.2.循环读取每一行用户数据
for line in f1:
# 2.3.获取每一行数据中的用户名
real_name, real_pwd = line.split('|')
# 2.4.判断用户名是否一致
if username == real_name:
print('用户名已存在')
break
else:
# 3.文件操作 写入数据
with open(r'userinfo.txt', 'a', encoding='utf8') as f:
f.write(data)
print('用户:%s 注册成功' % username)
多用户登录
代码整合:两者合一
# 多用户注册和登录
while True:
print('''
1.用户注册
2.用户登录
3.退出系统
''')
choice = input('请输入您想执行的功能编号>>>:').strip()
if choice == '1':
# 获取用户名和密码
username = input('请输入您的用户名>>>:').strip()
password = input('请输入您的密码>>>:').strip()
# 将用户名和密码组织成一个字符串
data = '%s|%s\n' % (username, password)
# 判断用户名是否已存在
with open(r'a.txt', 'r', encoding='utf8') as f1:
# 循环读取每一行用户数据
for line in f1:
# 获取每一行数据的用户名
real_name, leal_pwd = line.split('|')
# 判断用户名是否一致
if username == real_name:
print('用户已存在')
break
else:
# 文件操作 写入数据
with open(r'a.txt', 'a', encoding='utf8') as f:
f.write(data)
print('用户:%s 注册成功' % username)
elif choice == '2':
# 获取用户名和密码
username = input('请输入您的用户名>>>:').strip()
password = input('请输入您的密码>>>:').strip()
# 获取文件内真实的用户数据
with open(r'a.txt', 'r', encoding='utf8') as f:
for line in f:
# 切割字符串获取真实的用户名和密码 注意密码末尾有换行符\n
real_name, real_pwd = line.split('|')
# 对比用户名和密码是否正确
if username == real_name and password == real_pwd.strip('\n'):
print('登陆成功')
break
else:
print('用户名或密码错误')
else:
print('再见')
break
文件操作模式
t:
文本模式
1.默认的模式
r w a >>> rt wt at
2.该模式所有操作都是以字符串为基本单位(文本)
3.该模式必须要指定encoding参数
4.该模式只能操作文本文件
b:
二进制模式
1.该模式可以操作任意类型的文件
2.该模式所有操作都是以bytes类型(二进制)为基本单位
3.该模式不需要指定encoding参数
rb wb ab