第二章 Python入门
2020-12-13 02:15
标签:修改 code 打开 sel 数据 默认 png 定义 bytes 第一章计算机基础的部分,以后整理完后更新。 中文字符1个字符在utf-8中占3字节,在gbk中占2字节 如果想要修改默认编码,可以在代码开始行写入: 注意:对于操作文件,要按照:以什么编码写入,就要用什么编码去打开 首先我们介绍下硬板存储数据的方式:
把数据网硬盘存储,就要以相应的编码转成2进制后存储: Bytes类型:以16进制形式表示,2个16进制数构成一个byte,以 b‘‘来标识的字节串 需要注意的是,open() 文件会默认自动转换为2进制存储(write方法执行时)。所以open命令也是在2进制的基础上进行存储的。 utf-8编码每个中文3字节,gbk编码每个中文2字节。但是utf-8与国际通用 文件处理的open() 函数会默认自动转换2进制(bytes型)进行处理(读取时decode,存储时encode)。
所以open()打开文件后不需要进行转换处理。 如果我们不想让open()自动转换,那么我们可以以 wb,rb,ab 的模式打开: b: binary (2进制) .encode(self, encoding, errors)
编码:string(encoding) -> bytes(encoding) .decode(self, encoding, errors)
解码:bytes(encoding) -> string(unicode) 把文字从一种编码转化成另外一种。一般用(b模式处理) 为什么要进行编码转换?
比如:
windows(中文)创建的文件是默认gbk编码
linux/mac创建的文件是默认utf-8编码
当一个windows文件在linux系统上读取的时候,因为编码不同会显示乱码
例:gbk --> unicode --> utf-8 为什么要有变量 为某个值创建一个"别名",以后再使用时候通过此"别名"就可以直接调用 第二章 Python入门 标签:修改 code 打开 sel 数据 默认 png 定义 bytes 原文地址:https://www.cnblogs.com/py-xiaoqiang/p/11030154.html2.1 环境安装
2.2 编码
2.2.1 编码基础
2.2.2 Python编码相关
# -*- coding:utf-8 -*- #
2.2.3 扩展:Bytes类型
硬盘只能存储2进制数据。
所以数据网硬盘上存储,就要以相应的编码转成2进制后存储
1. Bytes类型
2. 编码: encode
s = '字符串'
s_2 = s.encode('utf-8') # 把utf-8的字符串编码成utf-8的bytes类型,并返回
print(s_2) # 输出 b'\xe5\xad\x97\xe7\xac\xa6\xe4\xb8\xb2'
# 这里\xe5 中'x'表示这是16进制,e5是2个16进制数,正好是8bit(1byte),表示一个字节。
# 这里一共9个字节(utf-8的一个中文占3个字节)
s_2 = s1 = s.encode('gbk') # 把gbk的字符串编码成gbk的bytes类型,并返回
print(s_2) # 输出 b'\xd7\xd6\xb7\xfb\xb4\xae'
# 这里一共6个字节(utf-8的一个中文占2个字节)
3. 文件操作与bytes类型
# f = open(‘windata.txt‘,‘r‘) # r(文本模式),把2进制自动解码成str(unicode) 。所以读取了硬盘文件可以是str
f = open('test.txt','wb') # 注意:2进制模式不能使用encoding关键字
f.write('字符串'.encode('utf-8')) # 把utf-8的字符串编码成utf-8的bytes类型,并写入。
# f.write('字符串') # 这个会报错,str不能直接写入b模式打开的文件,所以会报错。
2.2.4 编码与解码 encode,decode
s = '编码和解码'
s1 = s.encode('utf-8') # 把utf-8的字符串编码成utf-8的bytes类型
print(s1)
s2 = s1.decode('utf-8') # 把utf-8码的bytes类型解码成unicode码的字符串。默认是转utf-8,建议写明。
print(s2)
2.2.5 编码的转换
那么如何转换呢?
f = open('windata.txt','rb') # 以rb模式打开windows的文件,这里假设编码是gbk。
s = f.read() # 读取bytes数据
s_unicode = s.decode('gbk') # 把gbk码的s解码成unicode,并且赋值给s_unicode
s_utf8 = s_unicode.encode('utf-8') # 把unicode编码成utf-8,并且赋值给s_utf8
f.close()
f = open('windata.txt','wb') # 以wb模式打开文件
f.write(s_utf8) # 把utf-8码的bytes数据写入文件
f.close()
2.3 变量
待补完