字符编码针对的是文字,它只跟文本文件有关,这里不须要考虑视频、音频文件等其余文件。python
文本编辑器的输入和输出是两个过程windows
字符编码表就是字符与数字的对应关系编辑器
0000 0000工具
1111 1111编码
0000 0000 0000 0000spa
1111 1111 1111 1111 (最多能表示65535个字符)操作系统
基于上面的推导步骤,任何一个国家要想让计算机支持本国语言,都必须本身建立一个字符编码表。code
a = 0000 0000 0010 1010orm
1.浪费存储空间视频
2.io次数增长,程序运行效率下降(致命缺点)
当内存中的unicode( unicode transformation format )编码格式的数据存到硬盘时,会按照UTF-8编码给你转换。
现今的计算机:内存都是unicode、硬盘都是UTF-8
unicode的两个特色
数据由内存保存到硬盘
1.内存中的unicode二进制数字 >>>编码(encode)>>> UTF-8格式的二进制数据
硬盘中的数据由硬盘读到内存
1.硬盘中的UTF-8格式的二进制数据 >>>解码(decode)>>> 内存中unicode格式的二进制数据
乱码:字符不可以正常显示,由于编码不一致
python2
python3
文件头:
1.由于全部的编码文件都支持英文字符,因此文件头才可以正常生效
基于Python解释器开发的软件,只要是中文,前面都须要加一个u,为的就是将python2(当你不指定文件头的时候,默认用ASCII码存储数据,若是指定文件头就按照指定的编码格式存储)存储为unicode编码文件。
python3中字符串默认就是unicode格式
补充:
1.pycharm终端用的是UTF-8格式
2.windows终端cmd用的是GBK格式
八位二进制也叫8bit
8bit = 1Bytes
1024Bytes = 1KB
1024KB = 1MB
1024MB = 1GB
1024GB = 1TB
1024TB = 1PB
......
x = ‘上’ print(x.encode(‘utf-8’)) # b’\xe4\xb8\x8a’ # bytes类型 字节串类型,咱们把它当成二进制数据便可
x = ‘上’ res1 = x.encode(‘utf-8’) # 将unicode编码成能够存储和传输的utf-8格式的二进制数据 print(res1) # b’\xe4\xb8\x8a’ res2 = res1.decode(‘utf-8’) #将硬盘中的utf-8格式的二进制数据解码成unicode格式的二进制数据 print(res2)
例如:你a他
1Bytes|1Bytes|1Bytes|1Bytes|1Bytes|1Bytes|1Bytes
1+7bit|1+7bit|1+7bit|1+7bit|1+7bit|1+7bit|1+7bit|
其中1Bytes里由标识符显示如何分配的信息
什么是文件?
操做系统提供给用户操做复杂硬件(硬盘)的简易接口。
为何要操做文件?
人或者应用程序须要永久的保存数据。
如何进行文件处理?
经过python代码操做文件:
f = open(r‘copy_path便可’) #向操做系统发送请求,打开某个文件 # 里面的r是real取消转义,指的是原先的字符串 # 应用程序要想操做计算机硬件,必须经过操做系统来间接的操做 print(f) # f是文件对象 print(f.read()) #报错,由于windows操做系统默认的编码是GBK f = open(r‘copy_path便可’,encoding=‘utf-8’) print(f.read()) f.read() #向操做系统发请求,读取文件内容 f.close() #向操做系统发送请求,关闭打开的文件 print(f.read()) #报错,显示I/O operation on closed file
文件上下文操做:
with open(r’copy_path’,encoding=‘utf-8’) as f ,\ open(r’copy_path’,encoding=‘utf-8’) as f1: # f仅仅是个变量名,它只是个操做工具 print(f) print(f.read()) print(f1) print(f1.read())
文件打开模式:
操做文件单位的方式:
r模式
# mode参数能够不写,不写时默认时rt----只读的文本文件,这个t不写时默认就是t with open(r’copy_path’,mode=‘r’,encoding=‘utf-8’) as f: print(f.readable()) # False,是否可读 print(f.writeable()) # True,是否可写 print(f.read()) # 一次性将文件内容所有读出 print(f.write()) # 一次性将文件内容所有写出 with open(r’copy_path’,mode=‘rb’) as f: print(f.readable()) # False,是否可读 print(f.writeable()) # True,是否可写 print(f.read()) # 一次性将文件内容所有读出
# r模式在打开文件时,若是文件不存在,直接报错 # 文件路径能够写相对路径,可是须要注意该文件必须与执行文件在同一层文件下 with open(r’XXX’,‘rb’,encoding=‘utf-8’) as f: print(‘>>>1:’) print(f.read()) print(‘>>>2:’) print(f.read()) '''>>>1: XXXXXX XXXXXX >>>2: '''
# 读完一次以后,文件的光标已经在文件末尾了,再读就没有内容可读了 print(f.readlines()) # 返回的是一个列表,列表中的一个个元素对应的就是文件的执行内容 for i in f: # f能够被for循环,每for循环一次,读一行内容 print(i) # 这个方法能够解决大文件一次性读取占用内存太高的问题 print(f.readline()) # 只读取文件的一行内容
with open(r’copy_path’,‘w’,encoding=‘utf-8’) as f: print(f.readable()) # False,是否可读 print(f.writeable()) # True,是否可写 f.write(‘今天XXXXX\r\n’) # 用\r\n会换行两次 f.write(‘今天XXXXX\n’) # 用\n或者\r只会换行一次 l = [‘XXX,XXX\n’,‘XXX,XXX\n’] f.writelines() # 能够写多行,上下文等价 for i in l: f.write(i)
with open(r’copy_path’,‘a’,encoding=‘utf-8’) as f: print(f.readable()) # False,是否可读 print(f.writeable()) # True,是否可写 f.write(‘XXXXX\n’)