一、字符编码
-
如何保证不乱码:
存乱了:用utf-8编码存入硬盘
读乱了:将读的编码改成与存的编码一致
-
运行python程序的三个步骤:python test.py
-
1、启动python解释器
-
2、解释器将test.py的内容从硬盘读入内存
-
3、解释器解释执行刚刚读入内存的代码,识别python语法,比如x = "上"
-
1、字符编码
# 只跟文本文件和字符串有关 与视频文件 图片文件等无关
# 什么是字符编码
由于计算机内部只识别二进制 但是用户在使用计算机的时候却可以看到各式各样的语言字符
字符编码:内部记录了人类字符与数字对应关系的数据
2、字符编码发展史
# 1.一家独大
计算机最初是由美国人发明的 美国人为了能够让计算机识别英文字符
ASCII码:里面记录了英文字符与数字的对应关系
用一个字节来是对应关系
"""
所有的英文字符和符号加起来其实不超过127
之所以使用八位是为了后续发现新的语言
"""
必须记住的对应关系有以下两组
A-Z:65-90
a-z:97-122
# 2.群雄割据
中国人
为了能够让计算机识别中文 我们需要发明另外一套编码表
GBK码:记录了英文中文与数字的对应关系
对于英文还是使用一个字节
对应中文使用两个字节甚至更多字节
"""两个字节其实也不够表示出所有的中文
遇到生僻字可能需要更多位来表示
"""
日本人
为了能够让计算机识别日文 也需要发明一套编码表
shift_JIS码:记录了日文英文与数字的对应关系
韩国人
为了能够让计算机识别韩文 也需要发明一套编码表
Euc_kr码:记录了韩文英文与数字的对应关系
# 3.天下一统
为了能够实现不同国家之间的文本数据能够彼此无障碍交流需要对编码统一
unicode(万国码)
统一使用两个及以上字符记录字符与数字的对应关系
utf8(万国码的优化版本)
将英文还是用一个字节存储
将中文使用三个字节或更多字节存储
'''现在默认使用的编码是utf8'''
3、字符编码实操
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()
-
操作系统:打开文件
-
计算机硬件: 硬盘空间
-
-
3、如何用文件
打开文件:得到文件句柄并赋值给一个变量
读/写:通过句柄对文件进行操作
关闭文件
1、文件操作
"""
文件路径
相对路径与绝对路径
路径中出现了字母与斜杠的组合产生了特殊含义如何取消
在路径字符串前面加一个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语法"""
2、文件读写模式
"""
补全语法结构 没有实际含义
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 只追加模式(不可读;不存在则创建;存在则只追加内容)
# a: 如果文件不存在则创建空文档,如果文件存在则清空,文件指针跳到文件末尾
f = open(r'c.txt',mode='at',encoding='utf-8')
f.write("你好啊1\n")
f.write("你好啊2\n") # 打开了文件不关闭的情况下,新写入的内容永远跟在老内容之后
f.write("你好啊3\n")
f.close()