字符编码与文件操作
字符编码与文件操作
什么是字符编码?
人类在于计算机进行交互的时候,计算机是不能直接读懂人类的语言的,计算机能读懂的语言,人类也不能直接读懂,那为什么我们写的代码计算机能够做出相应的回应呢,为什么计算机作出的回应我们看的懂呢,这中间的一系列操作就用到了我们今天要学的字符编码,其中编码的意思就是翻译和转换的意思,翻译成计算机和人类能够读懂的语言。
字符编码的发展史
第一阶段:一家独大
因为计算机是美国发明的,所以一开始只考虑到了英文与数字的对应关系,也就是ASCII码:记录了英文字符与数字的对应关系,用1bytes来表示英文,1bytes等于8bit,有一些关键的ASCII码我们需要记住:“A-Z:65-90,a-z:97-122”
第二阶段:群雄割据
慢慢的其它国家也相继开始使用计算机,但是都面临了一个相同的问题,就是只有ASCII码,只能识别英文和数字,自己国家的语言识别不了,于是就开始了“群雄割据”,每个国家都有了属于自己答编码表。我国的叫“GBK”:记录了英文、中文、数字,用1bytes(8bit)来表示英文,2bytes(16bit)来表示中文(很多时候都是3bytes,因为中文字较多)。韩国也有自己的编码表,叫Euc_kr,还有日本的shift_JIS表。
第三阶段:天下一统
因为每个国家都有属于自己的编码表,就显得杂乱无章,所以这时候就有人来一统天下了,就是我们的万国码(unicode),虽然可以识别很多国家的编码表,但是所有的字符都是2bytes起步存储的,会浪费空间和读取的时间。所以万国码的转换版本“utf8”现世了,所以现在使用的是“内存使用unicode,硬盘使用utf8”。
字符编码的实际应用
1.编码与解码
(1).编码(encode):将人类能够读懂的字符编码成计算机能够直接读懂的字符。
如果字符串前面加了子母“b”,那么这个数据类型就是bytes类型,也就是我们常说的二进制。
(2).解码(decode):将计算机能够读懂的字符解码成人类能够直接读懂的字符。
网络传输数据,数据都必须是二进制的格式,因为计算机只能读懂二进制,所以基于网络传输数据的时候,一定涉及到了编码和解码。
2.解决乱码问题
解决乱码的问题很简单,数据当时用什么编码编码编的,就用什么编码解码,就像生活中的例子一样,你去美国找的翻译肯定是会英语的,不可能找了一个会韩语不会英语的翻译。
l = '有疫情,我们要乖乖呆着' l1 = l.encode('gbk') print(l1) # b'\xd3\xd0\xd2\xdf\xc7\xe9\xa3\xac\xce\xd2\xc3\xc7\xd2\xaa\xb9\xd4\xb9\xd4\xb4\xf4\xd7\xc5' l2 = l1.decode('gbk') print(l2) # 有疫情,我们要乖乖呆着 正确 l3 = l1.decode('euc_kr') print(l3) # 唐磊헙,乖쳬狼밋밋댜淪 乱码
3.python解释器层面
python3解释器默认的编码是utf8
python2解释器默认的就是ASCII码,如果我们想用其它的编码表,有以下步骤:
(1).文件头:必须写在文件的最上方,告诉解释器使用指定的编码。
# coding:utf8
(2).字符前缀:在使用python2解释器的环境下定义字符串习惯在前面加“u”
name = u'你好啊'
文件操作简介
1.什么是文件
是操作系统暴露给用户可以直接操作硬盘的快捷方式。
2.文件操作的基本语法结构
结构1(了解即可)
# l = open(文件的路径,文件的操作模式,文件的编码方式) # 打开文件
# l.close() # 关闭文件
结构二(经常使用)
# with open(文件的路径,文件的操作模式,文件的编码方式) as l: # 有自动关闭文件的功能 # pass
注意:文件的路径必须要写,文件的操作方式和编码方式有时候不用写
3.关于特殊符号
之前讲内置方法的时候讲过斜杠加字母可能会产生特殊含义,而我们这里文件的操做,要用到文件的路径,难免会遇到斜杠加字母,所以我们要习惯性的在前面加一个“r”。
文件的读写模式
文件的读写模式有三个关键字:r、w、a
r:即read,只读模式,只能读不能写
w:即write,只写模式,只能写不能读
a:即append,只追加模式,在文件末尾添加内容
1.r模式
# 路径不存在:报错 with open('2.txt','r',encoding='utf8') as l: pass # 路径存在: with open('1.txt','r',encoding='utf8') as l: print(l.read()) # 输出文本内容 print(l.write()) # 报错
2.w模式
# 路径不存在:直接创建一个新的文本文件 with open('2.txt','w',encoding='utf8') as l: pass # 路径存在: with open('1.txt','w',encoding='utf8') as l: print(l.read()) # 报错 l.write('啊实打实的') # 把之前的内容全部删除,然后加入新的内容
3.a模式
# 路径不存在:直接创建一个新的文本文件 with open('3.txt','a',encoding='utf8') as l: pass # 路径存在: with open('1.txt','a',encoding='utf8') as l: # print(l.read()) # 报错 l.write('啊实打实的') # 直接在之前的文本内容后面加入新的内容
文件的操作模式
t模式:文本模式
(1).该模式只能操作文本文件
(2).该模式必须要指定encoding参数
(3).该模式的读写都是以字符串为最小单位的
b模式:二进制模式
rb、wb、ab,不能省略“b”
(1).该模式可以操作任意类型的文件
(2).该模式不需要指定encoding参数
(3).该模式的读写都是以bytes为最小单位的
文件操作内置方法
1.read() # 一次性读取文件
(1).读取完毕之后光标在文件末尾,继续读取没有内容输出。
(2).当文件特别大的时候,容易造成内存溢出
2.readline() # 一次只读一行内容
3.readlines() # 返回的是一个列表,一个元素是一行内容
4.readable() # 判断当前文件是否可读
5.文件的读取支持for循环
6.write() # 写入内容(字符串或bytes类型)
7.writelines() # 可以将列表多个元素写入文件
8.writable() # 判断文件是否可写
9.flush() # 相当于ctrl+s(保存)
这里是IT小白陆禄绯,欢迎各位大佬的指点!!!