python day7

今日内容

字符编码:

字符编码针对的是文字,它只跟文本文件有关,这里不须要考虑视频、音频文件等其余文件。python

文本编辑器的输入和输出是两个过程windows

  • 人在操做计算机的时候输入的是人可以看懂的字符,可是计算机只能识别01010101这样的二进制数据
  • 那么人 输入的字符 >>>(字符编码表)>>> 二进制数字

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

  • ASCII码表:用八位二进制表示一个英文字符,且全部的英文字符+符号最多也就在125位左右

  0000 0000工具

  1111 1111编码

  • GBK编码表:用2Bytes表示一个中文字符,且用1Bytes表示一个英文字符

  0000 0000 0000 0000spa

  1111 1111 1111 1111 (最多能表示65535个字符)操作系统

基于上面的推导步骤,任何一个国家要想让计算机支持本国语言,都必须本身建立一个字符编码表。code

  • 万国码unicode:统一用2Bytes表示全部的字符

  a = 0000 0000 0010 1010orm

    1.浪费存储空间视频

    2.io次数增长,程序运行效率下降(致命缺点)

当内存中的unicode( unicode transformation format )编码格式的数据存到硬盘时,会按照UTF-8编码给你转换。

  • UTF-8会将unicode的英文字符由原来的2Bytes变成1Bytes
  • UTF-8会将中文字符由原来的2Bytes变成3Bytes

现今的计算机:内存都是unicode、硬盘都是UTF-8

(须要掌握的)

unicode的两个特色

  • 1.用户在输入的时候,不管输入什么字符都能兼容万国字符
  • 2.其余国家编码的数据由硬盘读到内存的时候,unicode与其余各个国家的编码都有对应关系

(必须掌握的)

数据由内存保存到硬盘

1.内存中的unicode二进制数字 >>>编码(encode)>>> UTF-8格式的二进制数据

 硬盘中的数据由硬盘读到内存

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

 

乱码:字符不可以正常显示,由于编码不一致

  • 保证不乱码的关键在于:
  • 文本文件以什么编码编的就用什么编码解!!!

python2

  • 将py文件按照文本文件读入解释器中时默认使用ASCII码(由于在开发python2解释器时unicode尚未盛行)

python3

  • 将py文件按照文本文件读入解释器中时默认使用UTF-8

 

文件头:

# coding:UTF-8

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 只读模式
  • w 只写模式
  • a 追加写模式

 操做文件单位的方式:

  • t 文本文件,t在使用时须要指定encoding参数,若是不指定就默认是操做系统的默认编码
  • b 二进制,必定不能指定encoding参数

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())  # 只读取文件的一行内容

W模式

  • 1.文件不存在的状况下,自动建立该文件
  • 2.当文件存在的状况下,会先清空文件内容再写入
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)

A 模式

  • 1.当文件不存在的状况下,自动建立一个文件
  • 2.当文件存在的状况下,不清空文件内容,文件的光标会移动到文件的最后
with open(r’copy_path’,‘a’,encoding=‘utf-8’) as f:

print(f.readable())  # False,是否可读

print(f.writeable())  # True,是否可写

f.write(‘XXXXX\n’)
相关文章
相关标签/搜索