python之字符编码(编码、解码)和文件操作基础(读、写、关闭文件)(7)

1、字符编码

1.1 引言

大家都知道电脑是使用二进制(01)语言的,而我们人类使用的是汉语、英语、法语、日语等等;那么电脑是如何识别并理解我们所输入的语言呢?这时我们就需要一个翻译官,可以将我们与电脑的对话进行翻译,这个翻译官就是字符编码

1.2 本质

字符编码就是一张将人类的的语言翻译成二进制的一张,为了让电脑可以识别我们输入的语言

1.3 字符编码规定

因为计算机最早由美国人发明,他们只用考虑将英文字母和阿拉伯数字转为二进制,将常用符号与八位二进制(01)对应;如:

  • a------0110 0001
  • b------0110 0010

bit(位):最小的表示单位
八位表示一个字节,八位可以有256个组合,能表示256种字符
字符的最小单位为字节

1.4 字符编码的发展历程

  1. 第一阶段:美国一家独大
    ASCLL码表
    1、只有英文字符和二进制的对应关系
    2、一个英文字符代表一个字节,每个字节256种组合可以显示所有英文字符

  2. 第二阶段:多家割据一方
    每个国家根据自己的语言做出编码表;如:
    中国编码表:gbk
    1、只有英文字符和中文字符的二进制对应关系
    2、一个英文字符是一个字节,一个中文字符是两个字节
    日本编码表:shift-jis

  3. 第三阶段:全球统一
    unicode(万国码)
    1、它兼容万国字符,与其它字符编码都有对应关系
    2、和传统的字符编码都有对应关系
    unicode采取固定的长度,两个字节代表一个字符
    utf-8:全球通用
    1、英文一个字符为一个字节
    2、中文一个字符为3个字节
    现在基本都使用utf-8这个字符编码

扩展:乱码的产生

  • 我们前面学到每个国家都有自己的字符编码,他们是不能互相沟通的;当我使用gbk来编写文件,然后用shift-jis来读取这个文件,就会产生乱码
  • 所以产生乱码的本质就是因为写入文件和读取文件的字符编码不同导致的
  • 英文字符、阿拉伯数字、通用字符一般是不会乱码的,因为他们全球通用

1.5 python中编码的使用

1.5.1 字符串编码

格式:字符串.encode('编码格式'),将指定字符串进行编码,得到二进制数据

a = '我爱阿豪'
print(a.encode()) # 没写编码格式,以默认格式输出,pycharm中默认格式为utf-8
print(a.encode('utf-8'))
print(a.encode('gbk'))

输出结果:

b'\xe6\x88\x91\xe7\x88\xb1\xe9\x98\xbf\xe8\xb1\xaa'
b'\xe6\x88\x91\xe7\x88\xb1\xe9\x98\xbf\xe8\xb1\xaa'
b'\xce\xd2\xb0\xae\xb0\xa2\xba\xc0'

注意:
上面得到的结果在python中都是以16进制显示的,但实际上的得到的是二进制数据;python只是为了方便显示

1.5.2 字符串解码

格式:二进制数据.decode(‘编码格式’),将二进制数据进行解码得到原字符串

b = b'\xe6\x88\x91\xe7\x88\xb1\xe9\x98\xbf\xe8\xb1\xaa'
c = b'\xce\xd2\xb0\xae\xb0\xa2\xba\xc0'
print(b.decode()) # 默认以utf-8形式解码
print(c.decode('gbk')) # 以gbk格式解码

输出结果:

我爱阿豪
我爱阿豪

注意:
二进制数据用什么格式进行的编码,解码就用什么格式,不然会报错

2、文件操作

2.1 文件的本质

文件是电脑给我们提供的一种可以将数据永久保存在外存(电脑硬盘)上的方式,每个文件都对应着外存上的一块区域;他可以帮助我们更好的管理电脑外存

2.2 python如何操作文件

2.2.1 打开文件

格式:文件对象 = open('文件路径','操作模式',encoding='编码格式'),打开或创建文件进行写入和读取的操作,文件对象就是一个变量
说明:

  1. 文件路径:文件在电脑上存放的位置,可以是绝对路径,也可以是相对路径
    注意:
    1、在写文件路径时最好加上原始字符串r以免发生转义;
    如:r'D:\ppt文档\day1.ppt'
    2、在python中路径符也可以使用反斜杠(/),这样也可以避免发生转义;
    如:'D:/word文档/day2.docx'
    3、若路径只写文件名,则该文件默认在当前文件夹下

  2. 操作模式,分为以下几种:

  • w :(覆盖写)
    使用该模式,当文件存在时就会删除文件中已有内容,再往里面添加数据;相当于覆盖写入,若文件不存在就会创建该文件
  • a:(追加写)
    当文件存在时,不会删除文件中的内容,而是直接在已有内容后接着写入数据,相当于追加写入,若文件不存在就会创建该文件
  • r:(读文件)
    当文件存在时,就会读取该文件的内容,若文件不存在,就会报错
    注意:
    模式 w 和 a 都只能创建文件,不能创建文件夹,所以文件路径中的文件夹必须存在,不然会报错
  1. encoding=‘编码格式’:可以指定以什么编码格式打开文件,不写以操作系统的编码格式打开,windows默认编码格式为gbk

书写模板:

f1 = open('try.txt','w') # 覆盖写,默认打开当前文件夹下的文件
f2 = open('try.txt','a',encoding='gbk') # 追加写,指定编码格式为gbk
f3 = open('text.txt','r') # 读文件

2.2.2 操作文件(读或写)

  • 向文件中写入内容,格式:文件对象.write(内容)
f1 = open('try.txt','w',encoding='utf-8') # 覆盖写,在当前文件夹下以utf-8的编码格式打开try.txt
f1.write('我是盲敲代码的阿豪') # 向文件中写入内容

在这里插入图片描述

  • 读取文件中的内容,格式:文件对象.read()
f1 = open('text.txt','r',encoding='utf-8') # 以读的方式打开文件
a = f1.read() # 将文件内容读取出来
print(a) # 打印读取的文件

在这里插入图片描述

  • 关闭文件,格式:文件对象.close()
f1 = open('text.txt','r',encoding='utf-8')
f1.read()
f1.close() # 在文件操作后,关闭文件,以免占用cpu资源

2.2.3 总结

文件的操作步骤如下:
1、打开文件(w、a、r)
2、读或写文件
3、关闭文件

例子:

# 覆盖写文件
f1 = open('try.txt','w',encoding='utf-8')
f1.write('啦啦啦啦啦')
f1.close()

# 追加写文件
f2 = open('try.txt','a',encoding='utf-8')
f2.write('6666')
f2.close()

# 读取文件
f3 = open('text.txt','r',encoding='utf-8')
b = f3.read()
f3.close()

2.2.4 扩展:pycharm在文件写入数据时为什么会乱码?

  • 问题展示:
# 覆盖写文件
f1 = open('try.txt','w') # 以默认编码格式打开文件
f1.write('啦啦啦啦啦')
f1.close()

在这里插入图片描述

  • 解决方法:
  1. 首先为什么会产生乱码?
    因为我们在打开文件时没有指定编码格式,python默认以电脑操作系统的编码格式打开了文件,这里我使用的是windows操作系统,默认编码格式为gbk,而pycharm中默认编码格式是utf-8,所以产生了冲突,造成乱码
    2、如何解决?
    这里我们指定编码格式为utf-8即可;如:
# 覆盖写文件
f1 = open('try.txt','w',encoding='utf-8') # 指定编码格式为utf-8
f1.write('啦啦啦啦啦')
f1.close()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盲敲代码的阿豪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值