文章目录
1、字符编码
1.1 引言
大家都知道电脑是使用
二进制(01)
语言的,而我们人类使用的是汉语、英语、法语、日语等等;那么电脑是如何识别并理解我们所输入的语言呢?这时我们就需要一个翻译官
,可以将我们与电脑的对话进行翻译,这个翻译官就是字符编码
1.2 本质
字符编码
就是一张将人类的的语言翻译成二进制的一张表
,为了让电脑可以识别我们输入的语言
1.3 字符编码规定
因为计算机最早由美国人发明,他们只用考虑将英文字母和阿拉伯数字转为二进制,将常用符号与八位二进制(01)对应;如:
- a------0110 0001
- b------0110 0010
bit(位)
:最小的表示单位
八位
表示一个字节
,八位可以有256个组合,能表示256种字符
字符的最小单位为字节
1.4 字符编码的发展历程
-
第一阶段:美国一家独大
ASCLL码表
1、只有英文字符和二进制的对应关系
2、一个英文字符代表一个字节,每个字节256种组合可以显示所有英文字符 -
第二阶段:多家割据一方
每个国家根据自己的语言做出编码表;如:
中国编码表:gbk
1、只有英文字符和中文字符的二进制对应关系
2、一个英文字符是一个字节,一个中文字符是两个字节
日本编码表:shift-jis -
第三阶段:全球统一
unicode(万国码)
1、它兼容万国字符,与其它字符编码都有对应关系
2、和传统的字符编码都有对应关系
unicode采取固定的长度,两个字节代表一个字符
utf-8
:全球通用
1、英文一个字符为一个字节
2、中文一个字符为3个字节
现在基本都使用utf-8
这个字符编码
扩展:乱码的产生
- 我们前面学到每个国家都有自己的字符编码,他们是不能互相沟通的;当我使用gbk来编写文件,然后用shift-jis来读取这个文件,就会产生
乱码
- 所以产生乱码的本质就是因为
写入文件和读取文件的字符编码不同导致的
- 英文字符、阿拉伯数字、通用字符一般是不会乱码的,因为他们全球通用
1.5 python中编码的使用
1.5.1 字符串编码
格式:
字符串.encode('编码格式')
,将指定字符串进行编码
,得到二进制数据
a = '我爱阿豪'
print(a.encode()) # 没写编码格式,以默认格式输出,pycharm中默认格式为utf-8
print(a.encode('utf-8'))
print(a.encode('gbk'))
输出结果:
b'\xe6\x88\x91\xe7\x88\xb1\xe9\x98\xbf\xe8\xb1\xaa'
b'\xe6\x88\x91\xe7\x88\xb1\xe9\x98\xbf\xe8\xb1\xaa'
b'\xce\xd2\xb0\xae\xb0\xa2\xba\xc0'
注意:
上面得到的结果在python中都是以16进制
显示的,但实际上的得到的是二进制数据
;python只是为了方便显示
1.5.2 字符串解码
格式:二进制数据.decode(‘编码格式’),将二进制数据进行
解码
得到原字符串
b = b'\xe6\x88\x91\xe7\x88\xb1\xe9\x98\xbf\xe8\xb1\xaa'
c = b'\xce\xd2\xb0\xae\xb0\xa2\xba\xc0'
print(b.decode()) # 默认以utf-8形式解码
print(c.decode('gbk')) # 以gbk格式解码
输出结果:
我爱阿豪
我爱阿豪
注意:
二进制数据用什么格式进行的编码,解码就用什么格式,不然会报错
2、文件操作
2.1 文件的本质
文件
是电脑给我们提供的一种可以将数据永久保存在外存
(电脑硬盘)上的方式
,每个文件都对应着外存上的一块区域;他可以帮助我们更好的管理电脑外存
2.2 python如何操作文件
2.2.1 打开文件
格式:
文件对象 = open('文件路径','操作模式',encoding='编码格式')
,打开或创建文件进行写入和读取的操作,文件对象
就是一个变量
说明:
文件路径:文件在电脑上存放的位置,可以是绝对路径,也可以是相对路径
注意:
1、在写文件路径时最好加上原始字符串r
以免发生转义;
如:r'D:\ppt文档\day1.ppt'
;
2、在python中路径符也可以使用反斜杠(/
),这样也可以避免发生转义;
如:'D:/word文档/day2.docx'
3、若路径只写文件名,则该文件默认在当前文件夹下操作模式,分为以下几种:
w
:(覆盖写)
使用该模式,当文件存在时就会删除文件中已有内容,再往里面添加数据;相当于覆盖写入,若文件不存在就会创建该文件a
:(追加写)
当文件存在时,不会删除文件中的内容,而是直接在已有内容后接着写入数据,相当于追加写入,若文件不存在就会创建该文件r
:(读文件)
当文件存在时,就会读取该文件的内容,若文件不存在,就会报错
注意:
模式w 和 a
都只能创建文件,不能创建文件夹,所以文件路径
中的文件夹必须存在,不然会报错
- encoding=‘编码格式’:可以指定以什么编码格式打开文件,不写以操作系统的编码格式打开,windows默认编码格式为gbk
书写模板:
f1 = open('try.txt','w') # 覆盖写,默认打开当前文件夹下的文件
f2 = open('try.txt','a',encoding='gbk') # 追加写,指定编码格式为gbk
f3 = open('text.txt','r') # 读文件
2.2.2 操作文件(读或写)
- 向文件中写入内容,格式:
文件对象.write(内容)
f1 = open('try.txt','w',encoding='utf-8') # 覆盖写,在当前文件夹下以utf-8的编码格式打开try.txt
f1.write('我是盲敲代码的阿豪') # 向文件中写入内容
- 读取文件中的内容,格式:
文件对象.read()
f1 = open('text.txt','r',encoding='utf-8') # 以读的方式打开文件
a = f1.read() # 将文件内容读取出来
print(a) # 打印读取的文件
- 关闭文件,
格式:文件对象.close()
f1 = open('text.txt','r',encoding='utf-8')
f1.read()
f1.close() # 在文件操作后,关闭文件,以免占用cpu资源
2.2.3 总结
文件的操作步骤如下:
1、打开文件(w、a、r)
2、读或写文件
3、关闭文件
例子:
# 覆盖写文件
f1 = open('try.txt','w',encoding='utf-8')
f1.write('啦啦啦啦啦')
f1.close()
# 追加写文件
f2 = open('try.txt','a',encoding='utf-8')
f2.write('6666')
f2.close()
# 读取文件
f3 = open('text.txt','r',encoding='utf-8')
b = f3.read()
f3.close()
2.2.4 扩展:pycharm在文件写入数据时为什么会乱码?
- 问题展示:
# 覆盖写文件
f1 = open('try.txt','w') # 以默认编码格式打开文件
f1.write('啦啦啦啦啦')
f1.close()
- 解决方法:
- 首先为什么会产生乱码?
因为我们在打开文件时没有指定编码格式,python默认以电脑操作系统的编码格式打开了文件,这里我使用的是windows操作系统,默认编码格式为gbk,而pycharm中默认编码格式是utf-8,所以产生了冲突,造成乱码
2、如何解决?
这里我们指定编码格式为utf-8
即可;如:
# 覆盖写文件
f1 = open('try.txt','w',encoding='utf-8') # 指定编码格式为utf-8
f1.write('啦啦啦啦啦')
f1.close()