21.8.17学习内容

昨日内容回顾

1.字符编码的发展史

"""
编码就是将人类看得懂的语言转换成电脑能看得懂的语言

由于计算机是由美国人发明的,所以刚开始的计算机只认识由美国人发明的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('输入错误请重新输入')

 

2.文件操作补充

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())# 指的文件末尾读取往前三个

#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来返回给调用者一个回馈

"""  

# 函数的使用一定要先定义后使用!!!

posted @ 2021-08-17 23:28  查无此人cxc  阅读(80)  评论(0)    收藏  举报