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('小老弟,好好输入!')

 

posted @ 2023-05-23 15:50  吼尼尼痛  阅读(34)  评论(0编辑  收藏  举报