字符编码和文件操作
默写题讲解
s1 = 'jason say hello hello hello big baby baby baby sb sb jason jason'
# 统计每个单词的个数
# 1.定义一个空字典
data_dict = {}
# 2.如果是拿每个单词 则使用切割
new_list = s1.split(' ') # ['jason','say',...]
# 3.for循环列表中每个单词
for i in new_list: # jason say hello hello ...
if i in data_dict: # i=jason {}
# 取出i对应的值自增1即可
data_dict[i] += 1
else:
# 新增一组键值对
data_dict[i] = 1 # data_dict['jason'] = 1 {'jason':1}
print(data_dict) # {'jason': 3, 'say': 1, 'hello': 3, 'big': 1, 'baby': 3, 'sb': 2}
s2 = 'jasonsayhello'
# 统计每个字符
# data_dict = {}
# # 直接循环字符串
# for i in s2:
# if i in data_dict:
# data_dict[i] += 1
# else:
# data_dict[i] = 1
# print(data_dict)
debug代码调试
1.先使用鼠标左键在需要调试的代码左边点击一下(会出现一个红点)
2.之后右键点击debug运行代码
员工管理系统
"""
目前仅用于学习练习使用 内部存在很多不合理的地方不要钻牛角尖
"""
# 2.定义一个空列表 用于存放用户字典数据
user_data_list = []
# 1.代码运行起来之后 可以循环提示用户有哪些功能编号可以选择
# 2.查看指定用户数据(格式化输出美化一下)
# 3.修改用户的薪资的待遇(一通百通) 修改用户名 年龄
# 4.查看所有用户数据(for循环展示)
while True:
print("""
1.添加用户
2.查看用户
3.删除用户
4.退出系统
""")
choice = input('请输入您想要执行的功能编号>>>:')
# 判断用户输入的编号
if choice == '1':
# 3.先获取用户编号
user_id = input('请输入您的编号>>>:').strip()
# 4.应该先校验用户编号是否已存在
# 4.1.循环获取每一个用户字典
for user_data_dict in user_data_list: # {'user_id': '1', 'name': 'jason', 'age': '18'}
if user_data_dict['user_id'] == user_id:
print('用户编号已存在')
break # 结束for循环校验
else:
# 5.获取用户相关信息
name = input('请输入您的用户名>>>:').strip()
age = input('请输入您的年龄>>>:').strip()
salary = input('请输入您的薪资>>>:').strip()
# 6.构造一个用户字典
tmp_dict = {}
# 7.创建键值对
tmp_dict["user_id"] = user_id
tmp_dict["name"] = name
tmp_dict["age"] = age
tmp_dict["name"] = name
# 8.添加到用户列表中
user_data_list.append(tmp_dict)
# 9.提示用户添加成功
print('用户:%s添加成功' % name)
elif choice == '2':
print(user_data_list)
elif choice == '3':
print('删除用户功能')
elif choice == '4':
print('退出系统功能')
else:
print('很抱歉 暂时没有该功能选项')
字符编码
# 只跟文本文件和字符串有关 与视频文件 图片文件等无关
# 什么是字符编码
由于计算机内部只识别二进制 但是用户在使用计算机的时候却可以看到各式各样的语言字符
字符编码:内部记录了人类字符与数字对应关系的数据
字符编码发展史
# 1.一家独大
计算机最初是由美国人发明的 美国人为了能够让计算机识别英文字符
ASCII码:里面记录了英文字符与数字的对应关系
用一个字节来是对应关系
"""
所有的英文字符和符号加起来其实不超过127
之所以使用八位是为了后续发现新的语言
"""
必须记住的对应关系有以下两组
A-Z:65-90
a-z:97-122
# 2.群雄割据
中国人
为了能够让计算机识别中文 我们需要发明另外一套编码表
GBK码:记录了英文中文与数字的对应关系
对于英文还是使用一个字节
对应中文使用两个字节甚至更多字节
"""两个字节其实也不够表示出所有的中文
遇到生僻字可能需要更多位来表示
"""
日本人
为了能够让计算机识别日文 也需要发明一套编码表
shift_JIS码:记录了日文英文与数字的对应关系
韩国人
为了能够让计算机识别韩文 也需要发明一套编码表
Euc_kr码:记录了韩文英文与数字的对应关系
# 3.天下一统
为了能够实现不同国家之间的文本数据能够彼此无障碍交流需要对编码统一
unicode(万国码)
统一使用两个及以上字符记录字符与数字的对应关系
utf8(万国码的优化版本)
将英文还是用一个字节存储
将中文使用三个字节或更多字节存储
'''现在默认使用的编码是utf8'''
字符编码实操
1.如何解决文件乱码的情况
文件当初以什么编码编的 打开的时候就以什么编码解
2.python解释器版本不同带来的编码差异
python2.X内部使用的编码默认是ASCII
# 文件头
coding:utf8
# 在python2中定义字符串前面要加一个小u
s = u'你'
python3.X内部使用utf8
"""
自定义文件模板内容
file
settings
Editor
file and code templates
python script
"""
3.编码与解码
编码
将人类能够读懂的字符安装指定的编码转换成数字
解码
将数字按照指定的编码转换成人类能够读懂的字符
s = '每天不要想太多 学就完事了 干就完了 奥利给!!!'
# 编码
# res = s.encode('utf8')
# print(res, type(res)) # bytes 在python中直接将该类型看成二进制数据即可
# 解码
# res1 = res.decode('utf8')
# print(res1)
文件操作
1.什么是文件?
文件其实是操作系统暴露给用户操作硬盘的快捷方式(接口)
2.代码如何操作文件
关键字open()
三步走:
1.利用关键字open打开文件
2.利用其它方法操作文件
3.关闭文件
"""
文件路径
相对路径与绝对路径
路径中出现了字母与斜杠的组合产生了特殊含义如何取消
在路径字符串前面加一个r
r'D:\py20\day08\a.txt'
"""
# open('a.txt')
# open(r'D:\py20\day08\a.txt')
# res = open('a.txt', 'r', encoding='utf8')
# print(res.read())
# res.close() # 关闭文件释放资源
"""
open(文件路径,读写模式,字符编码)
文件路径与读写模式是必须的
字符编码是可选的(有些模式需要编码)
"""
# with上下文管理(能够自动帮你close())
with open(r'a.txt','r',encoding='utf8') as f1: # f1=open() f1.close()
print(f1.read())
"""以后代码操作文件 推荐使用with语法"""
文件读写模式
"""
补全语法结构 没有实际含义
pass
...
"""
r 只读模式(只能看不能改)
# 路径不存在:直接报错
# with open(r'b.txt', 'r', encoding='utf8') as f:
# pass
# 路径存在
# with open(r'a.txt', 'r', encoding='utf8') as f:
# print(f.read()) # 读取文件内所有的内容
# f.write('123') # 写文件内容
w 只写模式(只能写不能看)
# 路径不存在:路径不存在自动创建
# with open(r'b.txt', 'w', encoding='utf8') as f:
# pass
# 路径存在:1.会先清空文件内容 2.再执行写入操作
with open(r'a.txt', 'w', encoding='utf8') as f:
# f.read()
f.write('hello world!\n')
f.write('hello world!\n')
f.write('hello world!\n')
a 只追加模式(追加内容)