总结
字符编码
回顾计算机基础:
- cpu:控制程序运行(从硬盘中取出文本编辑器的数据读入内存)
- 内存:运行程序(经CPU操作后,内存中含有的文本编辑器的数据)
- 硬盘:存储数据(文本编辑器)
文本编辑器
计算机只认识 0和1
文本编辑器的作用:读写数据,保存数据
Python解释器
python解释器具有文本编辑的功能
首先计算机只认识0和1,当用一个二进制编写时:如
01010100111010-->a = 1,在python解释器没有运行的时候就是普通的5个字符
定义变量就要开辟内存空间存放变量,因为内存只认识0和1,所以这一串字符要转换后才能被人认识
字符编码
字符编码:二进制和你所能认识的字符之间的相互转换的一个过程
早起是用ascii码,因为各国所用的编程语言不一样,为了让人都能使用不同国家的语言进行编辑,所以需要一种万国语言(Unicode)
什么情况下会出现乱码
格式不统一的时候会出现乱码
如:文本编辑器支持的是utf-8,你输入的是gbk-->文件的存储(乱码)
文本存储用了utf-8,但是下一次打开用了gbk-->文件的读取(乱码)
结论:当你打开所使用的文本编辑器,但是输入或者打开的文本不与之匹配,那么就会出现乱码
解决乱码
(牢记):什么格式存储,就什么格式读取,就不会乱码
补充:windows电脑的记事本默认为gbk编码,除此之外其它的软件默认编码为utf-8
python解释器运行代码流程
- 启动python解释器(相当于文本编辑器)
- 打开文件,显示这个字符并检出语法(涉及字符编码,a = 1只是一个很普通的字符)
- 解释字符(涉及字符编码,再去内存空间,生产一个a = 1 的变量)
python2和python3区别:
python2用的是ascii编码,python3默认是utf-8读取字符
coding:gbk 会告诉python3解释器用gbk编码读取字符
python3了解
python3用unicode进行字符编码
假设终端的默认编码是gbk,认识unicode 编码的变量,不会乱码
假设终端的默认编码是utf-8,认识unicode编码的变量,不会乱码
python2了解
python2是通过unicode+指定的coding编码(str类型)
终端是一个文本编辑器,会有默认编码
假设终端的默认编码是gbk,认识gbk编码的变量,不会乱码
假设终端的默认编码是utf-8,不认识gbk编码的变量,就会有乱码
文件的三种打开模式
- r : read,只能读不能写,文件不存在时会报错
#文件内容拿出来,读一行少一行
print(f.read()) 读取文件内所有内容
循环:
for i in f:
print(i)
f=open('price.txt','r',encoding='utf-8')
print(f.readable()) #判断是否可读 #true
f.close()
- w: write,只能写不能读,清空后再写入
f=open('price.txt','w',encoding='utf-8')
f.write('nick handsome')
f.close
- a :append 追加,在文件末追加
f=open('price.txt','a',encoding='utf-8')
f.write('chen')
f.close
with管理文件上下文
文本模式 t
f = open('test.py','rt')
data= f.read()
print(data)
进制模式b (一般用于对图片的处理)
f = open('python2和3的字符编码的区别.png', 'rb')
data=f.read()
print(data)
补充:with open(文件内容如:'test.txt', 'rt', encoding='utf8')as fr1
with open 与 open的区别:
- with open可以一次打开多个文件,可以在格式后面继续添加要打开的文件作为fr2...,以逗号分开,以 表示换行,这样可以做到只用一个open就能打开多个文件
- with open 是自动关闭文件,不要想open 那样还以使用 f.close来关闭文件