字符编码与文件操作

字符编码与文件操作

什么是字符编码?

人类在于计算机进行交互的时候,计算机是不能直接读懂人类的语言的,计算机能读懂的语言,人类也不能直接读懂,那为什么我们写的代码计算机能够做出相应的回应呢,为什么计算机作出的回应我们看的懂呢,这中间的一系列操作就用到了我们今天要学的字符编码,其中编码的意思就是翻译和转换的意思,翻译成计算机和人类能够读懂的语言。

字符编码的发展史

第一阶段:一家独大

因为计算机是美国发明的,所以一开始只考虑到了英文与数字的对应关系,也就是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小白陆禄绯,欢迎各位大佬的指点!!!

 

posted @ 2022-03-14 19:09  陆禄绯  阅读(146)  评论(0编辑  收藏  举报