21.8.17学习内容
""" 编码就是将人类看得懂的语言转换成电脑能看得懂的语言 由于计算机是由美国人发明的,所以刚开始的计算机只认识由美国人发明的ASCII编码. 随着计算机的普及,各国也发明了各国的编码本 中国人发明了gbk编码本 内部记录了英文 中文与数字的对应关系 韩国人Euc_kr码内部记录了英文 韩文与数字的对应关系 日本人shift_JIS码内部记录了英文 日文与数字的对应关系 最后有了utf8 (万国码的优化版本) 内部记录了各个国家的文字与数字的对应关系 """
# 补充!!! 8bit(1bytes) =一个字符可以把127个所有英文符号表示 但是通常人们为了应对突发状况,特意采用8个比特位.也使得换算更加方便. GBK码采用了16个二进制位来表示中文字符 # 但有时生僻字需要更多的bytes来表示
# 而utf8码 英文还是使用了8bit存储 中文使用了24bit存储 1. 目前所有的文本文件默认的编码是utf8 2.解决乱码的核心就是用什么编码编就用什么编码解,一定不会产生乱码的情况.

2.编码与解码
""" 编码指的就是用人类的字符转换成电脑的字符 只有字符串类型才能编码 res='你真帅' print(res.encode('utf8')) # b'\xe4\xbd\xa0\xe7\x9c\x9f\xe5\xb8\x85' 解码指的就是用电脑的符转化成人类的字符
res='啦啦啦啦'
res1=res.encode('utf8')
print(res1)
res2=res1.decode('utf8')
print(res2)
如果字符串中为纯英文或者数字可以简写 以b开头 """
# 数据基于网络传输格式只能是二进制,如果想要发送数据,必须要对这个数据进行转换.
3.文件操作基本语法
with open('123.txt','r',encoding='utf8') as f: print(f.read()) #也可以同时打开多个文件 with open('123.txt','r',encoding='utf8') as f,open('222.txt','r','encoding'='utf8')as g: print(f.read())
4.文件操作的读写模式
#三种操作模式 r:只读模式文件路径存在自动打开文件 如果不存在会直接报错 w:只写模式文件路径存在会先清空再写入内容, 如果不存在则自动创立 a:只追加模式,文件路径不存在会自动创建,文件路径存在则会将光标直接移动至文本末尾,
5.文件操作的操作模式
#一共两种操作模式: #t:文本模式也是默认的模式 只能操作文本文件 # b:二进制模式 可以操作任意模式
-------------------------------------------------------------------------------------------------------------------------------------
今日内容回顾
1.文件操作的代码补充
while True: #9.给用户选泽操作
def get_info():
user_name = input('username>>>:').strip() #4.登录部分
pass_word = input('password>>>:').strip()
def getinfo2():
user_name=input('注册你的账户>>>').strip() # 1.获取注册登录部分
pass_word=input('设置你的密码>>>').strip()
print('>>>1.登录2.注册<<<')
choice=(input('输入你想要的操作如果没有账号请先注册'))
if choice=='1': #10.如果选择1跳到登录操作
get_info()
with open('123.txt','r',encoding='utf8')as f: #5.打开文件比对内容对错.
data=f.read() # 6 将读取的内容进行赋值
real_name, real_password = data.split('|') #7.将输入内容进行切割
if real_name=='user_name' and real_password=='pass_word': # 8.判断对错
print('登录成功')
break
else:
print('用户名不存在或者密码错误')
break
elif choice=='2':# 11.跳转到注册操作
getinfo2()
with open('123.txt','w',encoding='utf8')as f: #2.写入密码及账户
f.write('%s|%s' %('user_name','pass_word'))
print('注册成功') # 3. 注册成功
choice2=input('输入1退出输入2返回主界面')
if choice2=='1':
print('欢迎下次登录')
break
elif choice2=='2':
choice2=choice
else:
print('输入错误请重新输入')
else:
print('输入错误请重新输入')
with open(r'123.txt','r',encoding='utf8') as f: print(f.readable()) # True print(f.writable()) # False f.flush() # readable指的是判断文件是否可读 # writeable指的是文件是否可写 # 即可保存数据至硬盘
with open(r'123.txt','a',encoding='utf8') as f: f.writelines(['max','123','hahaha']) # f.writelines 括号内放入内标多个元素都会被依次写入


3.控制光标移动
""" 可以用seek方法来控制光标的移动 seek(offset,whence) offset指的是控制移动的位数 whence是操作模式: 0:既可以用在文本模式也可以用在二进制模式下 1:只能二进制模式下使用 2:只能二进制模式下使用 """
with open(r'123.txt','r',encoding='utf8') as f: l=f.read() print(l) f.seek(1,0) print(f.read()) #f.seek(1,0)指的就是将文本光标移至开头并向后移动一位 with open(r'123.txt','rb') as f: l=f.read() print(l) f.seek(-3,1) print(f.read()) # f.seek(-3,1)# 指的是当前位置往前移3个字符,并且只能在二进制模式下使用 with open(r'123.txt','rb') as f: l=f.read() print(l) f.seek(-3,2) print(f.read())# 指的文件末尾读取往前三个
4.文件修改
with open(r'123.txt','r',encoding='utf8') as f: data = f.read() with open(r'123.txt','w',encoding='utf8') as f: f.write(data.replace('jason','tony')) # 缺点是如果文件很大 会导致内存溢出

# 创建一个新文件将老文件内容写入新文件 过程中完成修改 之后将老文件删除 将新文件命名成老文件 达到修改的效果 import os with open(r'a.txt','r',encoding='utf8') as f,open(r'a.txt.backend','w',encoding='utf8') as f1: for line in f: f1.write(line.replace('tony','jason')) os.remove(r'a.txt') # 删除原文件 os.rename(r'a.txt.backend',r'a.txt') # 给新文件重命名 # 需要导入模块 目前仅了解
5.函数
# 简单来说就是在编程过程中, 指对一个使用频率较高的代码进行函数编辑,去除了冗长的代码 从而用函数代替. """ 函数的语法结构 def 函数名(参数1,参数2): '''函数的注释''' 函数体代码 return 函数的返回值 """
""" 1.函数要做到见名知意并且要和变量名保持一致. 2.def后定义函数的关键字 3.函数需要注释,用来解释函数的代替的什么 4.执行完函数要用return来返回给调用者一个回馈 """
# 函数的使用一定要先定义后使用!!!

浙公网安备 33010602011771号