day03.14

字符编码

  • 字符编码

字符编码(Character encoding)也称字集码,是把字符集中的字符编码为指定集合中某一对象(例如:比特模式、自然数列、8位组或者电脉冲),以便文本在计算机中存储和通过通信网络的传递。常见的例子包括将拉丁编码成摩斯电码和ASCII。其中,ASCII将字母、数字和其它符号编号,并用7比特的二进制来表示这个整数。通常会额外使用一个扩充的比特,以便于以1个字节的方式存储。在计算机技术发展的早期,如ASCII(1963年)和EBCDIC(1964年)这样的字符集逐渐成为标准。但这些字符集的局限很快就变得明显,于是人们开发了许多方法来扩展它们。

note:字符编码只针对文本文件!!!

ASCII码:

记录了英文字符与数字的对应关系,一个字节bytes(8bit)来表示英文和一些特殊符号。其中:A~Z>>>65-90;a~z>>>97-122。

GBK(国标)码:

记录了英文、中文与数字的对应关系。通常用1bytes(8bit)来表示英文;用2bytes(16bit)来表示中文,但是很多时候都是3bytes。

Unicode(万国码):

如果有一种编码,将世界上所有的符号都纳入其中,无论是英文、日文、还是中文等,大家都使用这个编码表,就不会出现编码不匹配现象。每个符号对应一个唯一的编码,乱码问题就不存在了。这就是Unicode编码。Unicode固然统一了编码方式,但是它的效率不高,用四个字节bytes来存储一个英文字符,这对存储和传输来说都很耗资源。

UTF-8:

为了提高Unicode的编码效率,于是就出现了UTF-8编码。UTF-8可以根据不同的符号自动选择编码的长短。比如英文字母可以只用1个字节就够了。但是一般情况下,硬盘用的是UTF-8,但是为了使用的便捷性和兼容性,内存还是使用Unicode码。

  • 编码与解码

编码:

将人类能够读懂的字符编码成计算机能够直接读懂的字符。

在pycharm当中,编码使用encode来实现

eg:

s = '今天你吃饭了吗'
print(s.encode('gbk'))    # 转换为国标码

 

 

解码:

将计算机能够直接读懂的字符解码成人类能够读懂的字符。

在pycharm当中,解码使用decode来实现

eg:

s = b'\xbd\xf1\xcc\xec\xc4\xe3\xb3\xd4\xb7\xb9\xc1\xcb\xc2\xf0'
print(s.decode('gbk'))    # 国标gbk解码

 

 note:字符串前面如果加了字母b,表示该数据类型为bytes类型;bytes类型可以看成是二进制。

note:需要注意的是在计算机的网络传输过程中,数据必须都是计算机能够识别的二进制编码,因此编码与解码是计算机传输数据时必不可少的过程。

note:乱码的产生就说明编码和解码没有用同一个标准,计算机解析不出来就用乱码代替未解析的字符。

note:在python解释器当中,python2用的是ASCII码;而python3用的是UTF-8。

文件

什么是文件:

内存中存放的数据在计算机关机后就会消失。想要长久保存数据,就要使用硬盘、光盘、U 盘等设备。为了便于数据的管理和检索,引入了“文件”的概念。通俗的来讲文件就是计算机的操作系统暴露给用户可以直接操作硬盘的快捷方式。

用代码操作文件的方式:

  • 打开文件:

r模式(read):只读模式,只能读取,不能写

note:

在r模式下,如果路径不存在会直接报错,如果路径存在会直接打开并等待读取文件

结构1:(不常用)

f1 = open()    # 打开文件
f1.close()    # 关闭文件

结构2:

with open() as f:    # 括号内为文件路径
            pass    # 无实质意义,补全符号

note:

使用关键字打开文件时,为了防止文件路径当中存在一些具有实际功能的特殊符号,常常在文件路径前面加r来取消这些特殊符号的功能,只作为文件路径使用。
复制代码
open(r'a.txt')  # 相对路径
open(r'D:\py1\day09\a.txt')  # 绝对路径
res = open(r'a.txt', 'r', encoding='utf8')
    """
    open(文件的路径,文件的操作模式,文件的编码)
        1.文件的路径是必须要写的
        2.文件的操作模式、文件的编码有时候不用写
    """
print(res.read())  # 读取文件内容
res.close()  # 关闭文件
复制代码

上述操作open打开文件完最后都需要执行close操作!!!

引入with的结构操作:

with open(r'a.txt', 'r', encoding='utf8') as f:  # f = open()
        data = f.read()    # 读取文件内容
    print(data)

 

  • 编辑文件:

1、w模式(write):只写模式,只能写,不能读

note:

如果路径不存在的话,会直接创建一个新的文件;如果路径存在的话,会先清空文件内容!!!之后再写入数据。

with open(r'a.txt', 'w', encoding='utf8') as f1:
    f1.write('你们是我见过的最优秀一批学生1\n')  # 写入文件内容
    f1.write('你们是我见过的最优秀一批学生2\r')  # 写入文件内容
    f1.write('你们是我见过的最优秀一批学生3\n')  # 写入文件内容
    print(f1.read())
'''
\n、\r代表换行
'''

2、a模式(append):只追加模式:在文件末尾加入内容

note:

路径不存在也会直接自动创建一个新的文件;如果说路径存在的话,并不会清空文件内容!!!而是直接在文件后面添加新的内容。

# 路径不存在
with open(r'c.txt', 'a', encoding='utf8') as f1:
    pass
# 路径存在
with open(r'a.txt', 'a', encoding='utf8') as f1:
    f1.write('哈哈哈哈')
    print(f1.read())

 

  • 保存文件

flush(),相当于主动保存ctrl+s

  • 删除文件

文件的操作模式

1、t模式:即文本模式,是默认的模式(rt、wt、at等)

该模式只能操作文本文件
该模式必须要指定encoding参数
该模式读写都是以字符串为最小单位

2、b模式:即二进制模式(rb、wb、ab)其中b不能省略

该模式可以操作任意类型的文件
该模式不需要指定encoding参数
该模式读写都是以bytes类型为最小单位

文件的内置方法

1、read():即,一次性读取出文件内容。

note:1.读取完成之后,光标在文件末尾的最后一个字符,不能继续读取。2.如果文件特别大的话,会占用非常多的内存空间。

2、readline():即,一次只读取一行内容。

3、readlines():即,读取多行文件内容,其结果会生成一个列表,里面的元素就是文件的一行行内容。

4、readable():判断当前文件是否可读取,其结果是布尔值。

note:按行读取文件不会占用太多的内存空间,内存中同一时刻只会有一行内容,支持用for循环来读取文件内容。

5、write():写入文件内容(字符串或者是bytes类型)。

6、writelines():可以将列表中的多个元素写入文件。

7、writable():判断文件是否可写。

8、flush():保存,相当于主动按了ctrl+s。

 

 

 

posted @   *sunflower*  阅读(73)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示