字符编码和文件处理
文件处理
字符编码
一丶计算机基础
应用程序任何操作硬件的请求都需要向操作系统发起系统调用,然后由操作做系统去操作硬件
二丶文本编辑器存取文件的原理
1.打开了编辑器就打开了启动了一个进程,是在内存中的,所以,用编 辑器编写的内容也都是存放与内存中的,断电后数据丢失。
2.要想永久保存,需要点击保存按钮:编辑器把内存的数据刷到了硬盘 上。
3.在我们编写的一个py文件(没有执行),跟编写其他文件没有任何 区别,都只是在编写一堆字符而已。
三丶Pyhthon解释器执行py文件的原理
~第一阶段:Python解释器启动,此时就相当于启动了一个文本编辑 器。
~第二阶段:Python解释器相当于文本编辑器,去打test.py文件,从 一ing盘上将test.py文件,从硬盘上将test.py文件内容读入到内中。
~第三阶段:Python解释器解释执行刚刚加载到内存中的test.py的代 码。(ps:在该阶段,即真正执行代码时,才 会识别python的语 法,执行文件内代码,当执行到name= 'egon'时,会开辟内存空间 存放字符串"egon")
四丶 Python解释器与文件本编辑的异同
~相同点:Python解释器是解释执行文件内容的,因而Python解释器 具备读py文件的功能,这一点与文本编辑器一样。
~不同点:文本编辑器将文件内容读入内存后,是为了显示或编辑,根 本不会理会Python的语法,而Python解释器将文件内容读入内存后 ,可不是为了给你瞅一眼Python代码写的啥,而是为了执行Python 代码、会识别Python语法。
五丶编码
~Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种 语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有字 符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536, 注:此处说的的是最少2个字节,可能更多.
~utf-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节 节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节 保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存.
Python2和3字符编码的区别
python2默认的解释器编码ascii
python3默认的解释器编码utf-8
文件的三种打开方式
r:只读
f.read()
w:清空后写入(文件不存在自动创建)
f.weite()
a:追加(文件不存在自动创建)
f.write()
文本模式:t
二进制模式:b
t/b无法单独使用,只能和r/w/a一起使用
with管理文件上下文
with open() as f: # 自动关闭
pyinstaller的使用
pip instal pyinstaller
切换路径到文件夹(文件夹包含img.ico和test.py这两个文件)
pyinstaller -i img.ico -F test.py
文件的高级应用
打开的高级模式
-
r+:可读可写,指针文件末
-
w+:可读可写,清空文件(极力不推荐)
-
a+ :可读可写
文件的高级方法
- seek: 单位字节
- tell:单位字节
- read(n):单位字节
- truancate : 单位字节
用 rb 模式
```python
# with open('test.py', 'rb') as fr:
# fr.seek(1, 0) # 0是从文件头开始,走1个字节
# fr.seek(1, 1) # 1是从当前位置开始,走1个字节
# fr.seek(1, 2) # 2是从文件末开始,走1个字节
# fr.seek(0, 2) # 2是从文件末开始,走1个字节 # 定位到文件末尾
# print(f'fr.tell():{fr.tell()}') # 告诉你当前指针的位置
# print(fr.read()) # 中 --> \xe4\xb8\xad
# with open('test.py', 'a+b') as fa:
# fa.truncate(1)
with open('test.py', 'rt',encoding='utf8') as fr:
print(fr.read(3)) # 3个字符
```
文件的还原方法
Local history
修改文件的两种方式
文件没有修改这一说,只有覆盖。
with open ('tset.py','r+',endcoding='utf8') as fr:
fr.seek(3)
fr.write('中')
fr.flush() #如果不加flush短暂的停留在内存中,然后再刷入硬盘。
#如果加了会更快速刷入硬盘
with open ('tset.py','r',encoding='utf8') as fr,\
open('tset_swap.py','w',encoding='utf8') as fw:
data = fr.read()
data = data.repalce('sb','dsb')
fw.write(data)
import os
os.remove('tset.py')
os.remove('tset_swap.py','test.py')