上节回顾
01什么是字符编码
人类的语言---翻译---二进制
翻译的过程就称之为字符编码
保存不上目的 能取出来才是目的
二进制---翻译---人类的语言
这个过程称之为解码
要想保存翻译的结果则保证采用相同的规范也就是字符编码
字符编码发展历史:
ascll 一个字符占一个字节
GBK中文使用两个字节 英文使用一个字节
unicode支持任何国家的语言,使用两个字节存储所有符号(速度比较高,但是占用空间)
utf-8可将其看作是unicode的升级版,一个英文占一个字节一个中文占三个字节
UTF-8使用场景:
1.当我们需要将数据基于网络进行发送时,必须将数据转成二进制 GBK,UTF-8都可以,但是由于UTF-8兼容万国并且节省空间
2.当你需要将数据从内存写到硬盘,也推荐使用UTF-8
乱码的发生的两种情况:
1.存的时候使用的编码与取的时候不用
2.存的时候,出现了编码表中不存在的字符,例如既有英文又有中文,但是采取了asc来编码
如何保证不乱码:******
1、存取一致
2、使用兼容万国的编码表
python解释器在读取py文件需要识别语法,当在定义字符串变量时又设计到编码问题
py中默认采用asc也可以使用conding来指定,也有乱码的可能
py3中默认就是unicode 并且coding只能修改前两阶段的解码过程,无法修改编译变量的编码
******
encode 将unicode---翻译---某种指定格式的二进制如utf-8
decode某种指定格式的二进制如utf-8---翻译---unicode
encode的使用场景******
1.需要文本写入到硬盘时
2.需要将文本基于网络发送时
(存的时候用utf-8 用的使用转换为unicode)
02文件处理
文件是操作系统提供一套虚拟接口,用于简化对于硬盘的操作,一个文件就代表硬盘上的一段二进制数据
学习文件处理是为了将数据永久保存
基本路径
1.打开文件语法1
f=open(r'文件路径',mode='rt',encoding='utf-8')
f.read()
#f.write()
f.close()
2.语法2(上下文管理)
with open(r'文件路径',mode='rt',encoding='utf-8') as f:
pass
打开文件的模式
默认为t模式 即文本操作模式
r == rt 只读文本
w ==wt 只写文本
a ==at 追加写文本
无论是读还是写 都需要制定编码方式 如果不制定 windows默认为GBK linux默认为UTF-8
操作数据都是字符为单位
t模式(文本模式)
a和w 都是写入模式 如果说文件不存在,w和a都会创建新文件,不同的是w会清空源文件,a不会清空且会将光标移动到文件的末尾
b模式(非文本模式)
与文本相同在于都必须与r,w,a连用
rb 只读字节模式
wb 只写字节模式
ab 追加只写字节模式
b模式可以操作任意类型的文件,不需要设置编码encoding***
读写数据都以字节为单位
+可读可写模式
r+ ==r+t(光标在前面会覆盖前面的字符)
w+ ==w+t(打开就清空 所以读不到)
a+ ==a+t(移动指针到最后了 read不到东西)
+可读可写字节模式
r+b (光标在前面会覆盖前面的字符)
w+b (打开就清空 所以读不到)
a+b (移动指针到最后了 read不到东西)
每一个都有问题 所以可读可写并不常用
今日内容
01复制文件copy_Tool
从源文件读取,写入到新文件中
with的嵌套时 注意:不要对同一个文件进行操作
import sys #有一个文件sys import是导入这个文件
print(sys.argv) 得到的就是执行解释器传入的参数,第一个参数默认就是当前执行文件
02文件对象其他操作
f.name 获取文件路径
操作系统会在文件关闭时一次性写入,但操作系统的缓存满了也会写入(减少io操作,提高操作)
f.flush 立即将数据写入硬盘(可以保证数据不丢失,但效率降低)
f.closed 文件是否被关闭
f.encoding获取文件的编码
f.buffer获取缓冲区 忘记它吧
03修改文件的两种方式
文件修改的思路1
1.读取文件数据到内存
2.进行修改
3.将修改后的数据写会文件中
文件修改的思路2
读取一行 修改一行 修改完立马写入硬盘,避免了内存溢出的问题
import os 调用操作系统
os.remove #删除源文件
os.rename #将交换文件重命名为源文件
具体使用哪种方式 看文件的大小
较小的文件推荐一次性读到内存修改 减少oi\操作
较大的文件必须使用第二种操作