猫哥教你写爬虫 024--编码&&解码

什么是乱码?

乱码意味着... 码是乱的...

乱码的缘由: 编码和解码使用的不是同一个字符集

1558940190712

编码

字符串转二进制就叫编码...

二进制(逢二进一)

周幽王烽火戏诸侯。用烽火这种古老的信息传递形式

有火表明有敌人, 没火表明没有敌人...

只能表示两种状态, 那么如何表示敌人的多少呢?

1558940380815

有个段子:世界上有10种人,懂二进制和不懂二进制的

若是是三个呢...

1558940458121

用来存放一位0或1,就是计算机里最小的存储单位,叫作【位】,也叫【比特】(bit)。

咱们规定8个比特构成一个【字节】(byte),这是计算机里最经常使用的单位。

1558940492233

bitbyte长得有点像,可别混淆!1 byte = 8 bit,也就是1字节等于8比特。

1558940517765

百兆宽带是什么意思?

下载速度最多能达到十多兆,是由于运营商的带宽是以比特每秒为单位的,好比100M就是100Mbit/s

咱们常看到的下载速度KB倒是以字节每秒为单位显示的,1byte = 8bit,

因此运营商说的带宽得先除以8,你的百兆宽带下载速度,也就是十几兆了。

编码表

用数字表明字符

1558941251108

ASCII 用七位二进制来表示字符, 总共是128 可能性...

美国人民很开心, 中国人民表示不够用...(中国汉字10万多...)

自力更生, 扩展

GB2312,它用2个字节,也就是16个比特位,来表示绝大部分(65535个)经常使用汉字

GBK支持更多字符(共收录汉字21003个、符号883个,并提供1894个造字码位,简、繁合并)

同理, 小日本儿也有一套本身的标准, 韩国棒子也有一套本身的标准

印度阿三... 没有, 印度的国语是英语...

为了沟通的便利,Unicode(万国码)应运而生,这套编码表将世界上全部的符号都归入其中。

每一个符号都有一个独一无二的编码,如今Unicode能够容纳100多万个符号,全部语言均可以互通

问题: 为迁就一些占用字节比较多的语言,英文也要跟着占两个字节...

天才的想法:UTF-8(8-bit Unicode Transformation Format)

Unicode的可变长度字符编码,使用1~4个字节表示一个符号,不一样的符号, 变化字节长度

而当字符在ASCII码的范围时,就用一个字节表示,因此UTF-8还能够兼容ASCII编码

Unicode是内存编码的规范,而UTF-8是如何保存和传输Unicode的手段。

1558942064622
1558942094678

二进制和八进制,十六进制的关系

8进制是用0,1,2,3,4,5,6,7

16进制是用0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f来表示。

好比说,字母K在ASCII编码表用不一样进制表示的话是这样的:

1558942168832

由于2的3次方是8, 2的4次方是16,

因此3位二进制能够转换成1位8进制, 4位二进制能够转换成1位16进制

1558940863907

天才枪手观后感...

1558941959695

跨时区做弊...

1558941789833
1558941806840

编码和解码

Python3当中,程序处理咱们输入的字符串, 默认使用Unicode编码的,因此什么语言均可以输入。

一些中文的文件和中文网站,还在使用GBK,和GB2312

有时候面对不一样编码的数据,咱们要进行一些操做来实现转换

由于若是编码和解码用的规则不一样, 就会乱码...

1558942551731
1558942598340

encode()和decode()

将人类语言(字符)转换为计算机语言(二进制),就是【编码】encode()

反之,就是【解码】decode()

1558942700160

print('许竣皓'.encode('utf-8'))
print('许竣皓'.encode('gbk'))
print(b'\xe8\xae\xb8\xe7\xab\xa3\xe7\x9a\x93'.decode('utf-8'))
print(b'\xd0\xed\xbf\xa2\xf0\xa9'.decode('gbk'))
复制代码

b'\xce\xe2\xb7\xe3',这表明它是bytes(字节)类型的数据

1558948471841

编码,本质就是把str(字符串)类型的数据,

利用不一样的编码表,转换成bytes(字节)类型的数据。

1558948648136
1558948611243

decode()用于解码

1558948747717

print(b'\xe8\xae\xb8\xe7\xab\xa3\xe7\x9a\x93'.decode('utf8')) # 许竣皓
复制代码

文件读写

读写文件? 双击打开不就能改了?

若是要把100个文件的内容合成一个呢?好比名侦探柯南小说合集...

python读取文件

1558948954323

先建立一个work.txt, 再使用python读取里面的内容

1558964499329
1558964514845
1558964613889
1558964715320
1559008582420

file = open('C:\\Users\\Administrator\\Desktop\\demo\\work.txt','r',encoding='utf-8')
filecontent = file.read() # 读取全部内容
file.close()
print(filecontent)
复制代码

1558964806317
1559008662764

为何要关闭?

1.计算机可以打开的文件数量是有限制的,open()过多而不close()的话,占用计算机资源。

2.能保证写入的内容已经在文件里被保存好了。

python写文件

1558964914200

在work.txt里再写一行, "确认过眼神, 是社会主义加班人!"

1559008963686

file = open('C:\\Users\\Administrator\\Desktop\\demo\\work.txt','w',encoding='utf-8')
filecontent = file.write('确认过眼神, 是社会主义加班人!')
file.close()
复制代码

1558965120772

file = open('C:\\Users\\Administrator\\Desktop\\demo\\work.txt','w',encoding='utf-8')
filecontent = file.write('确认过眼神, 是社会主义加班人!')
file.close()
file = open('C:\\Users\\Administrator\\Desktop\\demo\\work.txt','r',encoding='utf-8')
print(file.read())
file.close()
复制代码

w表明写入, 会覆盖以前的内容, 若是追加, 请使用a

1558965264487

file = open('C:\\Users\\Administrator\\Desktop\\demo\\work.txt','a',encoding='utf-8')
filecontent = file.write('确认过眼神, 是社会主义加班人!')
file.close()
file = open('C:\\Users\\Administrator\\Desktop\\demo\\work.txt','r',encoding='utf-8')
print(file.read())
file.close()
复制代码

在**'w''a'模式下,若是你打开的文件不存在,那么open()**函数会自动帮你建立一个

1558965364664
1558965386320

若是不想每次都close(), 可使用with open... as

原来的代码...

file = open('C:\\Users\\Administrator\\Desktop\\demo\\work.txt','a',encoding='utf-8')
filecontent = file.write('确认过眼神, 是社会主义加班人!')
file.close()
file = open('C:\\Users\\Administrator\\Desktop\\demo\\work.txt','r',encoding='utf-8')
print(file.read())
file.close()
复制代码

使用open with open... as 的代码...

with open('C:\\Users\\Administrator\\Desktop\\demo\\work.txt','a',encoding='utf-8') as file:
    filecontent = file.write('确认过眼神, 是社会主义加班人!')
with open('C:\\Users\\Administrator\\Desktop\\demo\\work.txt','r',encoding='utf-8') as file:
    print(file.read())
复制代码

小做业: 计算总分和平均分

假设有一个文件scores.txt

张三 23 35 44 66 88
李四 60 77 68 88 90
王五 97 99 89 91 95 90
赵六 100 85 90 77 99 66
复制代码

结果相似于...

张三 23 35 44 66 88 总分 256 平均分 51.2
复制代码

须要的新知识

读取每一行 readlines()

1558967610399

str 转 list ==> str.split()

1558967762604

list 转 str ==> 分隔符.join(list)

1558967869559

遍历数组, 写入文件writelines()

1558968144004

快速跳转:

猫哥教你写爬虫 000--开篇.md
猫哥教你写爬虫 001--print()函数和变量.md
猫哥教你写爬虫 002--做业-打印皮卡丘.md
猫哥教你写爬虫 003--数据类型转换.md
猫哥教你写爬虫 004--数据类型转换-小练习.md
猫哥教你写爬虫 005--数据类型转换-小做业.md
猫哥教你写爬虫 006--条件判断和条件嵌套.md
猫哥教你写爬虫 007--条件判断和条件嵌套-小做业.md
猫哥教你写爬虫 008--input()函数.md
猫哥教你写爬虫 009--input()函数-人工智能小爱同窗.md
猫哥教你写爬虫 010--列表,字典,循环.md
猫哥教你写爬虫 011--列表,字典,循环-小做业.md
猫哥教你写爬虫 012--布尔值和四种语句.md
猫哥教你写爬虫 013--布尔值和四种语句-小做业.md
猫哥教你写爬虫 014--pk小游戏.md
猫哥教你写爬虫 015--pk小游戏(全新改版).md
猫哥教你写爬虫 016--函数.md
猫哥教你写爬虫 017--函数-小做业.md
猫哥教你写爬虫 018--debug.md
猫哥教你写爬虫 019--debug-做业.md
猫哥教你写爬虫 020--类与对象(上).md
猫哥教你写爬虫 021--类与对象(上)-做业.md
猫哥教你写爬虫 022--类与对象(下).md
猫哥教你写爬虫 023--类与对象(下)-做业.md
猫哥教你写爬虫 024--编码&&解码.md
猫哥教你写爬虫 025--编码&&解码-小做业.md
猫哥教你写爬虫 026--模块.md
猫哥教你写爬虫 027--模块介绍.md
猫哥教你写爬虫 028--模块介绍-小做业-广告牌.md
猫哥教你写爬虫 029--爬虫初探-requests.md
猫哥教你写爬虫 030--爬虫初探-requests-做业.md
猫哥教你写爬虫 031--爬虫基础-html.md
猫哥教你写爬虫 032--爬虫初体验-BeautifulSoup.md
猫哥教你写爬虫 033--爬虫初体验-BeautifulSoup-做业.md
猫哥教你写爬虫 034--爬虫-BeautifulSoup实践.md
猫哥教你写爬虫 035--爬虫-BeautifulSoup实践-做业-电影top250.md
猫哥教你写爬虫 036--爬虫-BeautifulSoup实践-做业-电影top250-做业解析.md
猫哥教你写爬虫 037--爬虫-宝宝要听歌.md
猫哥教你写爬虫 038--带参数请求.md
猫哥教你写爬虫 039--存储数据.md
猫哥教你写爬虫 040--存储数据-做业.md
猫哥教你写爬虫 041--模拟登陆-cookie.md
猫哥教你写爬虫 042--session的用法.md
猫哥教你写爬虫 043--模拟浏览器.md
猫哥教你写爬虫 044--模拟浏览器-做业.md
猫哥教你写爬虫 045--协程.md
猫哥教你写爬虫 046--协程-实践-吃什么不会胖.md
猫哥教你写爬虫 047--scrapy框架.md
猫哥教你写爬虫 048--爬虫和反爬虫.md
猫哥教你写爬虫 049--完结撒花.mdhtml

相关文章
相关标签/搜索