Python知识八(读写模式之a模式 文件操作的相关方法 文件操作模式 文件操作代码练习题 文件内光标的移动及文件修改)
昨日内容回顾
-
员工管理系统
1.循环打印系统中拥有的功能 2.获取用户输入的功能编号并判断是否在已有功能中 3.先在循环外定义存储用户数据的列表(用户数据放在列表元素用字典形式) 4.先获取用户的编号 5.循环获取列表中每个用户字典 判断用户编号是否存在 6.存在则提示用户并重新打印全部功能 7.如果不存在则获取用户其他数据并组织成一个字典 8.最后添加到用户列表中 -
字符编码
字符编码只跟文本文件有关 字符编码表:内部存储了数字与人类字符对应关系的数据 字符编码发展史 1.一家独大 ASCII码 英文字符与数字的对应关系 使用1bytes来表示单个字符 A-Z 65-90 a-z 97-122 2.群雄割据 GBK码 shift_JIS码 Euc_kr码 ...码 3.天下一统 unicode(万国码) utf8(转换版本 有很多种 功能都是为了优化万国码的存储) -
字符编码的实际应用
1.文件不乱码 只要保证当初用什么编码编的 就以什么编码解 2.python解释器版本 python2.X内部使用ASCII码 1.文件头 # coding:utf8 2.字符串前面加u s = u'你' 3.编码与解码 编码:人类的字符>>>计算机二进制 解码:计算机二进制>>>人类的字符串 字符串.encode('编码') bytes类型.decode('编码') -
文件操作
# 取消转义 很多英文字符与斜杠组合到一起会产生特殊含义 在字符串的前面加字母r # with上下文 1.open与close使用较为繁琐 f = open(文件路径,读写模式,编码) f.close() 2.with语法会自动帮你关闭文件资源 with open(文件路径,读写模式,编码) as f: pass # 读写模式 r 只读模式 路径不存在直接报错 路径存在则打开文件 w 只写模式 路径不存在则自动创建 路径存在会先清空文件内容之后再写入
今日内容概要
- 读写模式之a模式
- 文件操作的相关方法
- 文件操作模式
- 文件操作代码练习题
- 文件内光标的移动及文件修改
读写模式之a模式
# a模式 只追加模式
# 路径不存在:自动创建
with open(r'a.txt','a',encoding='utf8') as f:
pass
# 路径存在:不会清空文件 在文件末尾添加内容
with open(r'a.txt', 'a', encoding='utf8') as f:
f.write('\n今天周四了 马上又要放假了 好开心!')
"""小总结
我们所学习的r w a读写模式都只能操作文本文件
"""
文件操作方法
# 文件操作方法
# 1.读系列
with open(r'a.txt', 'r', encoding='utf8') as f:
print(f.read()) # 一次性读取文件内所有的内容
print(f.readline()) # 每次只读文件一行内容
print(f.readlines()) # 读取文件所有的内容 组织成列表 每个元素是文件的每行内容
print(f.readable()) # 判断当前文件是否具备读的能力
# 2.写系列
with open(r'a.txt','w',encoding='utf8') as f:
f.write('克服一切困难 奥利给!') # 往文件内写入文本内容
f.write(123) # 写入的内容必须是字符串类型
f.writelines(['jason','kevin','tony']) # 可以将列表中多个字符串元素全部写入
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循环 相当于一行行读取文件内容
line
'''以后涉及到多行文件内容的情况一般都是采用for循环读取'''
课堂练习
1.简易版本的注册、登陆功能
普通要求(实现一次即可)
注册功能
获取用户名和密码组织成你喜欢的样子写入文件即可
登陆功能
获取用户名和密码然后比对是否与文件内用户数据一致
# 注册功能
# 1.获取用户用户名和密码
username = input('username>>>:').strip()
password = input('password>>>:').strip()
# 2.将用户名和密码组织成一个字符串
data = '%s|%s' % (username, password)
# 3.文件操作 写入数据
with open(r'userinfo.txt', 'w', encoding='utf8') as f:
f.write(data)
print('用户:%s 注册成功' % username)
# 登录功能
# 1.获取用户名和密码(先使用input获取用户输入的数据 然后strip()移除首尾空格 之后赋值给变量名username)
username = input('username>>>:').strip()
password = input('password>>>:').strip()
# 2.获取文件内真实的用户数据
with open(r'userinfo.txt','r',encoding='utf8') as f:
# 由于现在文件中只有一行内容 我们干脆直接读取完
data = f.read() # 'jason|jason123'
'''with子代码执行完之后的结果是可以在外面使用的'''
# 3.切割字符串获取真实的用户名和密码
res = data.split('|') # ['jason', 'jason123']
'''这里也可以直接使用解压赋值的操作 real_name,real_pwd = data.split('|')'''
# 4.比对数据
if username == res[0] and password == res[1]:
print('登录成功')
else:
print('用户名或密码错误')
进阶练习
# 多用户注册
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)
# 多用户登录
# 1.获取用户名和密码(先使用input获取用户输入的数据 然后strip()移除首尾空格 之后赋值给变量名username)
username = input('username>>>:').strip()
password = input('password>>>:').strip()
# 2.获取文件内真实的用户数据
with open(r'userinfo.txt', 'r', encoding='utf8') as f:
for line in f:
# 3.切割字符串获取真实的用户名和密码
'''注意密码末尾有\n'''
real_name, real_pwd = line.split('|') # ['jason', 'jason123\n']
# 4.比对用户名和密码是否正确
if username == real_name and password == real_pwd.strip('\n'):
print('登录成功')
break
else:
print('用户名或密码错误')
代码整合
while True:
print("""
1.用户注册
2.用户登录
""")
choice = input('请输入您想要执行的功能编号>>>:').strip()
if choice == '1':
# 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)
elif choice == '2':
# 1.获取用户名和密码(先使用input获取用户输入的数据 然后strip()移除首尾空格 之后赋值给变量名username)
username = input('username>>>:').strip()
password = input('password>>>:').strip()
# 2.获取文件内真实的用户数据
with open(r'userinfo.txt', 'r', encoding='utf8') as f:
for line in f:
# 3.切割字符串获取真实的用户名和密码
'''注意密码末尾有\n'''
real_name, real_pwd = line.split('|') # ['jason', 'jason123\n']
# 4.比对用户名和密码是否正确
if username == real_name and password == real_pwd.strip('\n'):
print('登录成功')
break
else:
print('用户名或密码错误')
else:
print('没有改功能 爱咋滴咋滴!')
文件操作模式
t 文本模式
1.默认的模式
r w a >>> rt wt at
2.该模式所有操作都是以字符串基本单位(文本)
3.该模式必须要指定encoding参数
4.该模式只能操作文本文件
b 二进制模式
1.该模式可以操作任意类型的文件
2.该模式所有操作都是以bytes类型(二进制)基本单位
3.该模式不需要指定encoding参数
rb wb ab
作业
1.整理今日内容并完成博客编写
2.熟练掌握课堂练习
普通版本 必会
进阶版本与封装版本掌握越快越好
3.写一个简易的拷贝工具
支持所有的文件类型
简单拷贝工具
FILE中文件路径不用区分大小写
needcopy = input('输入你需要拷贝的文件地址(格式:C:/??/文件名.后缀):')
output = input('输入你copy后将要要放置的文件地址(格式:C:/??/文件名.后缀)')
with open(needcopy, mode='rb', ) as f:
date = f.read()
with open(output, mode='wb', ) as f1:
date2 = f1.write(date)
print('copy完成')

文件路径不区分大小写.

浙公网安备 33010602011771号