python 基础day09 字符编码
字符编码
前提:字符编码只跟文本数据和字符串有关系,他跟视频文件、音频文件等无关
为什么要有字符编码?
计算机内部只认识01二进制数据,但是,我们现在在计算机上写的各种各样的字符,为什么都能正常显示?
字符编码:它的内部记录着字符和数字之间的对应关系
eg:
0 ---> a
1 ---->b
00 ---> aa
01----> ab
000 ----> aaa
001 -----> aab
010101010--->你好
字符编码的发展史
1. 一家独大
计算机最开始是由美国人发明的,他们肯定是想让计算机识别英文字符。
ASCII码表:它的内部记录了英文字符和数字之间的关系
ASCII码表内置使用一个字节代表一个字符
一个字节等于8位
0000001
2 ** 7 == 128
2 ** 8 == 256
在当初的时候,127种情况足够秒杀当时遇到的所有字符
后面使用8位代表一个字节是为了后续增加字符
需要记忆:
A-Z:65-
a-z:97-
0-9:48-
字符串的比较:是按照ASCII码表的十进制数进行比较的
print('hello' > 'world')
2. 群雄割据
中国人要想使用计算机,就自己开发了一套编码表
GBK码表:它的内部记录了英文、中文和数字之间的对应关系
你----->129
好------>130
2 ** 16 == 65536
它还是使用一个字节保存英文字符
使用两个字节保存中文字符
日本人要想使用计算机,也得发明一套属于自己的编码表
Shift_JIS表
韩国人也要有一套属于自己的编码表
Euc-kr表
3. 一统天下
为了让世界上的所有国家之间能够彼此无障碍的交流,统一使用了编码
unicode(万国码)
它的内部是统一使用两个字节保存字符或者更多字符
由于原来的英文字符是使用一个字节保存的,现在万国码使用了两个字节,所以就把资源浪费了一倍
utf8编码(unicode的优化版本)
原来是用一个字节的英文字符,现在还是用一个字节保存
中文字符使用三个字节保存
2**24
最终得出结论:以后在使用字符编码的时候就使用utf8
补充:
utf-8、utf-16、utf-32...、utf8mb4(存表情)
字符编码实操
1.适合解决字符乱码问题?
你写的时候使用的是什么编码,打开的时候就用什么编码打开
2. python解释器代码的差异
**-coding:utf-8-**
在python2中,默认使用的编码是ASCII码
python3中默认使用的是utf8编码
3. 编码和解码
编码:把其他字符产转为二进制的过程
str----->0101
str----->unicode----->0101001
ASCII---->GBK------>unicode----->utf8
解码:把二进制转为其它字符产的过程
# 编码 res = s.encode('utf8') print(res) # b'hello' # 二进制 binary bin() print(res) # b'hello\xe4\xbd\xa0\xe5\xa5\xbd\xe5\x93\x88' # 解码 res1 = res.decode('utf8') # gbk、utf8 print(res1) # hello你好哈 # 补充 s1 =b'hello123' # 只能是纯英文字符 s2='hello123'.encode('utf8')
文件操作
1.为什么要使用代码操作文件?
当文件数量比较多的时候,人工操作就不太方便了,所以我们借助代码来操作
2.如何操作文件?
三步走:
1、打开文件
2、操作文件(读、写)
3、关闭文件(释放资源的)
在路径中如果出现了斜杠和字母连用的情况,为了不产生歧义,在字符串的前面加一个r
r'D:\python26\day09\aa\a.txt'
f=open('a.txt', 'r', encoding='utf8') print(f) # <_io.TextIOWrapper name='a.txt' mode='r' encoding='utf8'> print(f.read()) # 关闭文件 f.close() # 释放资源 # 方式2:打开文件 # with上下文管理器 with open('a.txt', 'r', encoding='utf8') as ffffff: print(ffffff.read()) # 内部自动关闭close
员工管理系统(练习)
''' 1. 查看所有员工信息,for循环一下,格式化输出 2. 查看指定的用户信息,提示,多加一个让客户输入编号的input 3. 修改指定的用户信息,通过编号 4. 删除一个用户信息 ''' # 员工管理系统 # 定义一个变量存储用户信息 data = [] while True: print(''' 1.添加员工信息 2.查看员工信息 3.修改员工信息 4.删除员工信息 5.退出系统 ''') choice = input('请选择你的操作:').strip() # 判断是否是数字类型 if not choice.isdigit(): continue if choice == '1': print('添加员工信息') # 用户输入相关信息 user_id = input('请输入你的编号:').strip() for user_data in data: if user_id == user_data.get('user_id'): break else: name = input('请输入你的姓名:').strip() age = input('请输入你的年龄:').strip() gender = input('请输入你的性别:').strip() salary = input('请输入你的工资:').strip() # 用户输入的信息组装成字典形式 ku = {} ku['user_id'] = user_id ku['name'] = name ku['age'] = age ku['gender'] = gender ku['salary'] = salary # 字典加入列表中 data.append(ku) elif choice == '2': print('查看员工信息') print(data) elif choice == '3': print('修改员工信息') elif choice == '4': print('删除员工信息') elif choice == '5': print('退出系统') break else: print('小老弟,好好输入!')