python小白学习笔记《12.编码和文件读写》

python小白学习笔记《12.编码和文件读写》

0.编码

编码的本质就是让只认识0和1的计算机,能够理解我们人类使用的语言符号,并且将数据转换为二进制进行存储和传输。

这种从人类语言到计算机语言转换的形式,就叫做编码表,它让人类语言和计算机语言能够一一对应起来。

要了解编码,我们还得先来聊聊二进制。由于有二进制,0和1这两个数字才能像“太极生两仪,两仪生四象,四象生八卦”一样,涵盖容纳世间所有的信息。

0.0二进制

将十进制转换为二进制,以50为例子:
在这里插入图片描述
将二进制转换为十进制,以为1001例子:
在这里插入图片描述
两个二进制位 与十进制的对应关系:

二进制十进制
000
011
102
113

所以两个二进制位可以表示十进制的0,1,2,3四种状态。

继续往下推,当有三个二进制位的时候,可以表示0~7八种状态(也就是2的3次方)。

以此类推,当有八个二进制位的时候,就能表示2的8次方,也就是256种状态,它由8个0或1组成。

用来存放一位0或1,就是计算机里最小的存储单位,叫做【位】,也叫【比特】(bit)。我们规定8个比特构成一个【字节】(byte),这是计算机里最常用的单位。

1 byte = 8 bit,也就是1字节等于8比特

1B(byte) = 8bit
1KB(Kilobyte 千字节) = 1024B
1MB(Megabyte 兆字节) = 1024KB
1GB(Gigabyte 吉字节) = 1024MB

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

0.1编码表

计算机一开始发明的时候,只是用来解决数字计算的问题。后来人们发现,计算机还可以做更多的事,正所谓能力越大,责任越大。但由于计算机只识“数”,因此人们必须告诉计算机哪个数字来代表哪个特定字符。

于是除了0、1这些阿拉伯数字,像a、b、c这样的52个字母(包括大小写),还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,理论上每个人都可以有自己的一套规则(这就叫编码)。

但大家如果想要互相沟通而不造成混乱,就必须使用相同的编码规则。如果使用了不同的编码规则,那就会彼此读不懂,这就是“乱码”的由来。

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

将编码史浓缩成一个表格表示,就是:

编码表适用性特点
ASCII码英文大小写,字符,不支持中文美国发明,占用空间小
GB2312码,GBK码支持中文GBK码是GB2312码的升级
Unicode支持国际语言占用空间大,适用性强
UTF-8码支持国际语言是Unicode的升级,两者可以非常容易地相互转化,占用空间小。ASCII码被UTF-8码包含

人类语言千变万化,我们有《新华字典》《牛津英语字典》这样的辞书来记录和收纳。可以说,这些编码表就是计算机世界的字典辞书,它们同样也是人类智慧的结晶。

0.2encode()和decode()

编码,即将人类语言转换为计算机语言,就是【编码】encode();反之,就是【解码】decode()。它们的用法:

'你想编码的内容'.encode('你想使用的编码表')
'你想解码的内容'.decode('你想使用的编码表')
print('小明'.encode('utf-8'))
print('小明'.encode('gbk'))
print(b'\xe5\xb0\x8f\xe6\x98\x8e'.decode('utf-8'))
print(b'\xd0\xa1\xc3\xf7'.decode('gbk'))

终端:
在这里插入图片描述
所谓的编码,其实本质就是把str(字符串)类型的数据,利用不同的编码表,转换成bytes(字节)类型的数据。
编码结果中除了标志性的字母b,你还会在编码结果中看到许多\x,你再观察一下这个例子:b’\xce\xe2\xb7\xe3’。

\x是分隔符,用来分隔一个字节和另一个字节。

分隔符还挺常见的,我们在上网的时候经常会看到网址里面有好多的%,它们也是分隔符,替换了Python中的\x。比如像下面这个:

https://www.baidu.com/s?wd=%E5%B0%8F%E6%98%8E

\xe5\xb0\x8f\xe6\x98\x8e  # Python编码“小明”的结果
%E5%B0%8F%E6%98%8E  #网址里的‘小明’

它的意思就是在百度里面,搜索“小明”,使用的是UTF-8编码。其实它们除了分隔符以外,是一模一样的。

1.文件读写

文件读写,是Python代码调用电脑文件的主要功能,能被用于读取和写入文本记录、音频片段、Excel文档、保存邮件以及任何保存在电脑上的东西。

假如你有一项工作,需要把100个Word文档里的资料合并到1个文件上,这时就能用上Python了。

或者,当你要从网上下载几千条数据时,直接用Python帮你把数据一次性存入文件也很方便。

1.0读取文件

首先,我们先在桌面新建一个test文件夹,然后在文件夹里新建一个名为abc的txt文件,在里面随便写点儿什么:
在这里插入图片描述
用编辑器Visual Studio Code打开这个文件,是这样的:
在这里插入图片描述
然后,用VS Code新建一个open.py的Python文件,也放在test文件夹里,我们就在这里写代码。

读文件的三步:开——读——关:

【第1步-开】使用open()函数打开文件。语法是这样的:

file1 =  open('\Users\maria\Desktop\test\a.txt','r',encoding='utf-8')

\Users\maria\Desktop\test\a.txt是该文件在我电脑中的地址,要找到你的文件地址,只需要把你要打开的文件直接拖到编辑器终端的窗口里,就会显示出文件地址,然后复制一下就好。

字符串 ‘r’,表示 read,表示我们以读的模式打开了这个文件。

除了’r’,其他还有’w’(写入),‘a’(追加)等模式

encoding=‘utf-8’,表示的是返回的数据采用何种编码,一般采用utf-8或者gbk。

【第2步-读】
打开文件file1之后,就可以用read()函数进行读取的操作了:

file1 =  open('\Users\maria\Desktop\test\a.txt','r',encoding='utf-8')
filecontent = file1.read()

第2行代码是读取file1的内容,写法是变量file1后面加个.句点,再加个read(),并且把读到的内容放在变量filecontent里面,这样我们才能拿到文件的内容。

现在我们想要看看读到了什么数据,可以用print()函数看看:

file1 =  open(' \Users\maria\Desktop\test\a.txt','r',encoding='utf-8')
filecontent = file1.read()
print(filecontent)

【第3步-关】关闭文件,使用的是close()函数。

file1 =  open(' \Users\maria\Desktop\test\a.txt','r',encoding='utf-8')
filecontent = file1.read()
print(filecontent)
file1.close()

为啥要关闭文件呢?原因有两个:
1.计算机能够打开的文件数量是有限制的,open()过多而不close()的话,就不能再打开文件了。
2.能保证写入的内容已经在文件里被保存好了。

文件关闭之后就不能再对这个文件进行读写了。如果还需要读写这个文件的话,就要再次 open() 打开这个文件。

学完了【读文件】,然后是【写文件】。

1.1写入文件

写文件也是三步:打开文件——写入文件——关闭文件。
【第1步-开】以写入的模式打开文件。

file1 = open('/Users/maria/Desktop/test/a.txt','w',encoding='utf-8')

以写入的模式打开了文件"abc.txt"。

open() 中还是三个参数,其他都一样,除了要把第二个参数改成’w’,表示write,即以写入的模式打开文件。

【第2步-写】往文件中写入内容,使用write()函数。

file1 = open('/Users/maria/Desktop/test/a.txt','w',encoding='utf-8')
file1.write('LISA\n')     
file1.write('ROSE\n')  

第2、3行代码:往a.txt文件里写入LISA和ROSE,\n表示另起一行。
运行代码后,打开文件a.txt:
用编辑器打开:
在这里插入图片描述
在桌面打开:
在这里插入图片描述
发现原先写的maria不见了,这是因为’w’写入模式会清空掉文件内容,然后再写入。

如果你只想增加东西,而不想完全覆盖掉原文件的话,就要使用’a’模式,表示append,是追加的意思。

使用’a’模式重写代码:

file1 = open('/Users/maria/Desktop/test/a.txt','a',encoding='utf-8')
file1.write('LISA\n')     
file1.write('ROSE\n')  

这样的话,就会追加成功,而不会覆盖了:
在这里插入图片描述
【第3步-关】还是要记得关闭文件,使用close()函数,看代码:

file1 = open('/Users/maria/Desktop/test/a.txt','a',encoding='utf-8')
file1.write('LISA\n')     
file1.write('ROSE\n')
file1.close()

两个小提示:
1.write()函数写入文本文件的也是字符串类型。
2.在’w’和’a’模式下,如果你打开的文件不存在,那么open()函数会自动帮你创建一个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值