总结七

一.字符编码


字符编码针对的是文字,只跟文本文件有关 不需要考虑视频音频文件

文本编辑器的输入和输出是两个过程
人在操作计算机的时候输入的是人能够看懂的字符,但是计算机只能识别010101这样的二进制数据,那么
输入的字符 >>> (字符编码表)>>> 二进制数字

字符编码表就是字符与数字的对应关系

ASCII码表
用八位二进制表示一个英文字符 所有的英文字符+符号最多也就在125左右
0000 0000
1111 1111 2**8-1

GBK
用2Bytes表示一个中文字符 还是用1Bytes表示一个英文字符
0000 0000 0000 0000
1111 1111 1111 1111 最多能表示65535个字符 2**16-1

基于上面的推导步骤,任何一个国家想要让计算机支持本国语言都必须自己创建一个字符与数字的对应关系

万国码Unicode
统一用2Bytes表示所有的字符
a 0000 0000 0010 1010

1.浪费存储空间
2.io次数增减,程序运行效率降低(致命)

当内存中的Unicode编码格式数据存到硬盘的时候,会按照UTF-8编码
Unicode transformation format

会将Unicode的英文字符由原来的2Bytes编程1Bytes
会将Unicode中文字符由原来的2Bytes变成3Bytes

现在的计算机 内存都是Unicode 硬盘都是UTF-8

需要掌握的:
数据由内存保存到硬盘
内存中的unicode格式二进制数字 >>>编码(encode)>>> UTF-8格式的二进制数据

硬盘中的数据由硬盘读到内存
硬盘中的UTF-8格式的二进制数据 >>>解码(decode)>>> 内存中unicode格式的二进制数据

******
保证不乱码在于 文本文件以什么编码编的就以什么编码解

python2
将py文件按照文本文件读入解释器中默认使用ASCII码(因为在开发python2解释器的unicode还没盛行)
python3
将py文件按照文本文件读入解释器中默认使用UTF-8

文件头
# coding:UTF-8
1.因为所有的编码都支持英文字符,所以文件头才能够正常生效

基于python解释器开发的软件,只要是中文,前面都需要加一个u
为了就是讲python2(当你不指定文件头的时候,默认用ASCII存储数据,如果指定文件头那么久按照文件头的编码格式存储数据)

python3中字符串默认就是unicode编码格式的二进制数

补充:
1.pycharm终端用的是UTF-8格式
2.windows终端采用的是GBK

乱码:字符不能够正常显示 编码不一致

八位二进制也叫8bit *******
8bit = 1Bytes
1024Bytes = 1KB
1024KB = 1MB
1024MB = 1GB
1024GB = 1TB
1024TB = 1PB

总结
x = '上'
res1 = x.encode('gkb') # 将unicode编码成可以存储和传输的utf-8的二进制数据
print(res1) # b'\xe4\xb8\x8a'
# bytes类型 字节串类型 你就把他当成二进制数据即可
res2 = res1.decode('gbk') # 将硬盘中的utf-8格式的二进制数据解码成unicode格式的热进制数据
print(res2)

 

二.文件管理


什么是文件 操作系统提供给用户操作复杂硬件(硬盘)的简易的接口

为什么操作文件 人或者应用程序需要永久的保存数据

如何用
f = open()
f.read()
f.colse()

通过python代码操作文件
r 取消转意
f = open(r'D:\Python项目\day07\a.txt',encodeing='utf-8') # 向操作系统发送请求 打开某个文件
# 应用程序想要操作计算机硬件 必须通过操作系统来间接的操作
print(f) # f是文件对象
print(f.read()) # windows操作系统默认的编码是gbk
f.read() # 向操作系统发请求 读取文件内容
f.close() # 告诉操作系统 关闭打开的文件
print(f)
print(f.read())

# 文件上下文操作
with open(r'D:\Python项目\day07\a.txt',encoding='utf-8') as f ,\
open(r'D:\Python项目\day07\b.txt',encoding='utf-8') as f1: # f仅仅是一个变量名 你把它看成是一个遥控器
print(f)
print(f.read())
print(f1)
print(f1.read())

文件处理的模式
r 只读模式
w 只写模式
a 追加写模式

操作文件单位的方式
t 文本文件 t在使用的时候需要制定encoding参数 如果不知道默认是操作系统的默认编码
b 二进制 一定不能制定encoding参数

mode参数 可以不写 不写的话默认是rt 只读的文本文件 
with open(r'D:\python项目\day07\a.txt',mode='r',encoding='utf-8') as f:
print(f.readable()) # 是否可读
print(f.writable()) # 是否可写
print(f.read()) # 一次性将文件内容全部读出

r模式在打开文件的时候,如果文件不存在,直接报错
文件路径可以写相对路径,但是需要注意该文件必须与执行文件在同一层文件下
with open(r'a.txt',mode='r',encoding='utf-8' as f:
with open(r'a.txt','r',encoding='utf-8') as f: mode关键字可以不写
# print(f.readable()) # 是否可读
# print(f.writable()) # 是否可写
# print(">>>1:")
# print(f.read()) # 一次性将文件内容全部读出
# print('>>>2:')
# print(f.read()) # 读完一次之后,文件的光标已经在文件末尾了,再读就没有内容可读了
# print(f.readlines()) # 返回的是一个列表,列表中的一个个元素对应的就是文件中的一行行内容
# for line in f: # f可以被for循环 ,每for循环一次,读一行乃荣
print(i) # 这个方法就可以解决大文件一次性读取占用内存过高的问题
# print(f.readline()) # 制度去文件一行内容
# print(f.readline())
# print(f.readline())
# print(f.readline())

w模式:w模式一定要慎用
1.文件不存在的情况下,自动创建该文件
2.当文件存在的情况下,会先清空文件内容再写入
with open(r'xxx.txt',mode='w',encoding='utf-8') as f:
print(r.readable()) # 是否可读
print(r.wrieable()) # 是否可写
# f.write('就很棒!\n')
# l = ['不丑,不帅\n','不高,不矮\n','不穷,不富\n']

a模式
1.当文件不存在的情况下,自动创建该文件
2.当文件存在的情况下,不清空文件内容,文件的光标会移动到文件的最后
with open(r'yyy.txt',mode='a',encoding='utf-8') as f:
print(f.readable()) # 是否可读
print(r.writable()) # 是否可写
f.write('我是小尾巴\n')

posted @ 2019-07-09 09:55  二哈强拆Python世界  阅读(138)  评论(0)    收藏  举报