什么是乱码?
乱码意味着... 码是乱的...
乱码的缘由: 编码和解码使用的不是同一个字符集
编码
字符串转二进制就叫编码...
二进制(逢二进一)
周幽王烽火戏诸侯。用烽火这种古老的信息传递形式
有火表明有敌人, 没火表明没有敌人...
只能表示两种状态, 那么如何表示敌人的多少呢?
有个段子:世界上有10种人,懂二进制和不懂二进制的
若是是三个呢...
用来存放一位0或1,就是计算机里最小的存储单位,叫作【位】,也叫【比特】(bit)。
咱们规定8个比特构成一个【字节】(byte),这是计算机里最经常使用的单位。
bit和byte长得有点像,可别混淆!1 byte = 8 bit,也就是1字节等于8比特。
百兆宽带是什么意思?
下载速度最多能达到十多兆,是由于运营商的带宽是以比特每秒为单位的,好比100M就是100Mbit/s
咱们常看到的下载速度KB倒是以字节每秒为单位显示的,1byte = 8bit,
因此运营商说的带宽得先除以8,你的百兆宽带下载速度,也就是十几兆了。
编码表
用数字表明字符
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的手段。
二进制和八进制,十六进制的关系
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编码表用不一样进制表示的话是这样的:
由于2的3次方是8, 2的4次方是16,
因此3位二进制能够转换成1位8进制, 4位二进制能够转换成1位16进制
天才枪手观后感...
跨时区做弊...
编码和解码
Python3当中,程序处理咱们输入的字符串, 默认使用Unicode编码的,因此什么语言均可以输入。
一些中文的文件和中文网站,还在使用GBK,和GB2312。
有时候面对不一样编码的数据,咱们要进行一些操做来实现转换
由于若是编码和解码用的规则不一样, 就会乱码...
encode()和decode()
将人类语言(字符)转换为计算机语言(二进制),就是【编码】encode();
反之,就是【解码】decode()
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(字节)类型的数据
编码,本质就是把str(字符串)类型的数据,
利用不一样的编码表,转换成bytes(字节)类型的数据。
decode()用于解码
print(b'\xe8\xae\xb8\xe7\xab\xa3\xe7\x9a\x93'.decode('utf8')) # 许竣皓
复制代码
文件读写
读写文件? 双击打开不就能改了?
若是要把100个文件的内容合成一个呢?好比名侦探柯南小说合集...
python读取文件
先建立一个work.txt, 再使用python读取里面的内容
file = open('C:\\Users\\Administrator\\Desktop\\demo\\work.txt','r',encoding='utf-8')
filecontent = file.read() # 读取全部内容
file.close()
print(filecontent)
复制代码
为何要关闭?
1.计算机可以打开的文件数量是有限制的,open()过多而不close()的话,占用计算机资源。
2.能保证写入的内容已经在文件里被保存好了。
python写文件
在work.txt里再写一行, "确认过眼神, 是社会主义加班人!"
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','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
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()**函数会自动帮你建立一个
若是不想每次都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()
str 转 list ==> str.split()
list 转 str ==> 分隔符.join(list)
遍历数组, 写入文件writelines()
猫哥教你写爬虫 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