python day7

今日内容

字符编码:

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

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

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

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

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

  0000 0000

  1111 1111

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

  0000 0000 0000 0000

  1111 1111 1111 1111 (最多能表示65535个字符)

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

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

  a = 0000 0000 0010 1010

    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’)

 

 

转载于:https://www.cnblogs.com/zhukaijian/p/11139300.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值