一、编码的历史
老师给我们讲了一个故事内容是这样子的:
最开始的计算机编码是美国的ASCII码。八个比特位(b)是一个字节(B),一个比特位可以存储0和1两种字符,1KB=1024B,1MB=1024KB...
美国的特殊字符和字母占7个比特位,把最高位留了出来。后来南美用剩下的那个位编码他的拉丁文。后来中国计算机发展起来了,没有承认拉丁文的部分,只承认了美国的那7个比特位,用了两个字节的空间进行编码汉文,编码方式即GBK。之后计算机发展迅猛,相继好几个国家都扩展美国的那7个比特位发展自己国家的编码。这样就造成了国家与国家间计算机不能互通。一个国际间计算机权威组织后来统一用四个字节编码了世界上所有的语言,这个编码即Unicode编码。这种编码虽然使国家间的计算机可以互通,只是这种编码都需要用四个字节,美国的国家用一个字节就可以实现所有功能,这种编码造成了空间上的浪费。最后出了一个utf8的编码既可以兼顾国家间语言的互通,又使编码可自由伸缩,美国用这种编码仍然可以只占一个字节,汉语占3个字节。
计算机和人类的交互从此开始。
机器只认识0和1的机器编码,加入编码模式,使得人类能够更加方便的进行计算机的开发工作。
二、python中的编码
由于不同种类的编码占用的字节数不同,因此用什么编码方式编码,就需要用什么编码方式解码,否则会出现乱码。
"""
编码转换
"""
aa="小飞"
bb=aa.encode("UTF-8")#编码
print(bb)#b'\xe5\xb0\x8f\xe9\xa3\x9e'
cc=bb.decode("UTF-8")#解码
print(cc)#小飞
2、计算机框架
存储在计算机硬件上的是字节码,比如编辑器编辑通常都有一个默认的编码方式,它通过编码编译成字节码存入计算机,显示出来是通过解码,输出字符码便于人们交互的一个这样的过程。编辑器即上面的APP应用,中间操作系统隔离了这种直接操作。
python做的操作就是编解码中的APP应用操作。
三、文件读写操作
1、读写文件
fp=open("burpbag.txt","r",encoding="UTF-8")#默认编码方式UTF-8,编码格式错误会报错
data1=fp.read()
print(data1)#读取文件信息
fp1=open("test.txt","w")
fp1.write("this is a test")
fp1.flush()#不使用的话,很可能打开文件并未写进去
#或者fp1.close()关闭,内容才会写进去
2、mode的模式
mode | 说明 | 注意事项 |
r | 只读模式打开文件,指针在文件开头 | 文件必须存在 |
rb | 以字节码、只读方式打开文件,指针在开头位置,一般读取非文本文件,比如图片,视频文件等 | |
r+ | 既可以从头读,也可以从头覆盖写 | |
rb+ | 针对非文本文件,进行从头读写(覆盖) | |
w | 只写方式打开文件 | 文件存在,会清空原文件内容;反之,则会新建文件 |
wb | 只写方式打开字节码文件 | |
w+ | 打开文件,会对原有文件进行清空,具有读写权限 | |
wb+ | 以字节码读写方式打开文件,一般用于非文本文件 | |
a | 追加模式打开文件,指针位于末尾;没有此文件即会创建,对文件只有写权限 | |
ab | 非文本文件的写模式追加 | |
a+ | 读写模式的追加,有则追加,无则创建 | |
ab+ | 非文本文件的读写模式追加 |
3、读文件的方法
read():逐个字节或者字符进行文件读取
readline():逐行读取文件中的内容
readlines():读取文件多行内容
1)读字节
fp=open("test.txt","r")#默认编码方式UTF-8,编码格式错误会报错
data1=fp.read(1)
data2=fp.read(2)
data3=fp.read(5)#读取的时候,指针在移动
print(data1,data2,data3)#读取文件信息
"""
执行结果:
H el lo wo
"""
2)读行
fp=open("test.txt",mode="r",encoding="UTF-8")#默认编码方式UTF-8,编码格式错误会报错
data1=fp.readline()
print(data1)#读取文件内容一行信息
data2=fp.readlines()
print(data2)
"""
执行结果:
Hello world
['Hello world1\n', 'Hello world2\n', 'Hello world3\n', 'Hello world4']
"""
3)循环读取
fp=open("test.txt",mode="r",encoding="UTF-8")#默认编码方式UTF-8,编码格式错误会报错
for line in fp:
print(line,end="")
"""
以上循环等价于:
for line in fp.readlines():
print(line,end="")
"""
"""
执行结果:
Hello world
Hello world1
Hello world2
Hello world3
Hello world4
"""
4、写文件内容
fp1=open("test.txt","w+")
fp1.writelines(["I\n","am\n"])#每个列表元素是一行,必须加\n
fp1.write("this is a test")
fp1.flush()#不使用的话,很可能打开文件并未写进去
fp1.close()
#关闭,内容才会写进去
5、指针
file.tell()读取当前指针的位置
file.seek()将文件指针移动至指定位置
seek(offset[,whence])
offset属于偏移量,whence有三个值0代表文件头,1代表当前位置,2代表文件尾
注意,当 offset 值非 0 时,Python 要求文件必须要以二进制格式打开,否则会抛出
io.UnsupportedOperation
错误。