python入门 Day08
Day 08
字符编码、文件处理
一、储备知识
阶段一:启动python解释器
阶段二:python解释器此时就是一个文本编辑器,负责打开文件test.py,即从硬盘中读取test.py的内容到内存中
文本编辑器的原理
- 打开编辑器就打开了启动了一个进程,是在内存中的,所以,用编辑器编写的内容也都是存放与内存中的,断电后数据丢失
- 要想永久保存,需要点击保存按钮:编辑器把内存的数据刷到了硬盘上。
- 在我们编写一个py文件(没有执行),跟编写其他文件没有任何区别,都只是在编写一堆字符而已。
python解释器执行py文件的原理 ,例如python test.py
- 第一阶段:python解释器启动,此时就相当于启动了一个文本编辑器
- 第二阶段:python解释器相当于文本编辑器,去打开test.py文件,从硬盘上将test.py的文件内容读入到内存中(小复习:pyhon的解释性,决定了解释器只关心文件内容,不关心文件后缀名)
- 第三阶段:python解释器解释执行刚刚加载到内存中test.py的代码( ps:在该阶段,即真正执行代码时,才会识别python的语法,执行文件内代码,当执行到name=“egon"时,会开辟内存空间存放字符串"egon”)
二、什么是字符编码
计算机要想工作必须通电,即用‘电’驱使计算机干活,也就是说‘电’的特性决定了计算机的特性。电的特性即高低电平(人类从逻辑上将二进制数1
对应高电平,二进制数0
对应低电平),关于磁盘的磁特性也是同样的道理。结论:计算机只认识数字
很明显,我们平时在使用计算机时,用的都是人类能读懂的字符(用高级语言编程的结果也无非是在文件内写了一堆字符),如何能让计算机读懂人类的字符?
必须经过一个过程:
字符--------(翻译过程)------->数字
这个过程实际就是一个字符如何对应一个特定数字的标准,这个标准称之为字符编码
1、ASCII:只能识别英文字符
特点:采用8bit
对应一个英文字符8bit=1Byte
2、GBK:可以识别中文字符串与英文字符
特点:采用16bit
对应字符,该字符可以是英文字符、也可以是中文字符
3、shift-JIS
4、unicode:可以识别万国字符
特点:2Bytes
对应一个字符
5、utf-81Byte
对应英文字符3Byte
对应一个中文字符
三、字符串的发展史
1、群雄割据:
英文字符--------------内存:ASCII二进制数--------------->硬盘:ASCII二进制数
中文英文字符--------------内存:GBK二进制数--------------->硬盘:GBK二进制数
日文英文字符--------------内存:shiftJIS二进制数--------------->硬盘:shiftJIS二进制数
韩文英文字符--------------内存:Euc-Kr二进制数--------------->硬盘:Euc-Kr二进制数
2、过渡阶段:
中文英文字符------------内存:unicode=gbk====>硬盘:GBK二进制数
日文英文字符------------内存:unicode=shifJIS>硬盘:shiftJIS二进制数
韩文英文字符------------内存:unicode=Euc-Kr=>硬盘:Euc-Kr二进制数
万国字符----------------内存:unicode=utf-8==>硬盘:utf-8二进制数
内存固定使用:unicode
我们可以改变的是从内存写入硬盘采用的编码格式
3、分久必合:
万国字符----------------内存:unicode=utf-8==>硬盘:utf-8二进制数
万国字符----------------内存:utf-8==========================>硬盘:utf-8二进制数
四、乱码问题
1、储存的时候乱了:采用的字符编码无法识别输入的字符。存的时候已经乱了,是无法补救的,读取的时候也一定乱了
**solution:**存入硬盘的编码格式应该用utf-8
格式
2、读取的时候乱了:存储的时候采用的可以识别输入的字符但是读取的时候乱码了,采用的字符编码表与存储时候的编码表不是同一个
**solution:**存储读取都用相同的编码格式
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;
第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。
小结
Python 3的字符串使用Unicode,直接支持多语言。
当str
和bytes
互相转换时,需要指定编码。最常用的编码是UTF-8
。Python当然也支持其他编码方式,比如把Unicode编码成GB2312
:
>>> '中文'.encode('gb2312')
b'\xd6\xd0\xce\xc4'
但这种方式纯属自找麻烦,如果没有特殊业务要求,请牢记仅使用UTF-8
编码。
格式化字符串的时候,可以用Python的交互式环境测试,方便快捷。
文件操作的其他方法
一、什么是文件
文件是操作系统提供给用户/应用程序操作硬盘的一个虚拟单位
文件是具有文件名的一组相关信息的集合。由若干个记录组成。文件系统是操作系统中与文件管理有关的软件和数据的集合。
功能
1. 实现按文件名存取文件信息
2. 为用户提供统一友好的接口
3. 实施对文件和文件目录的管理
4. 文件存储器空间的分配与回收
5. 提供有关文件的共享和保护。
二、为什么要使用文件
存取硬盘必须使用文件
三、如何用文件
f = open(文件路径,打开模式)
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
- name : 一个包含了你要访问的文件名称的字符串值。
- mode : mode 决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读®。
- encoding : 设置编码的格式
mode 详解
mode | 说明 | 备注 |
---|---|---|
r | 只读方式打开 | 文件必须存在 |
w | 只写方式打开 | 文件不存在则创建文件 |
a | 追加方式打开(即一打开文件,文件指针自动移到文件末尾) | 文件不存在则创建文件 |
r\w\a+ | 打开一个文件进行更新(读写模式) | |
r\w\ab | 以二进制打开一个文件进行更新(读写模式) |
f.write(数据)
fileObject.write( [ str ])
向文件中写入指定字符串 , 返回的是写入的字符长度。
str – 要写入文件的字符串。
f.close()
fileObject.close()
用于关闭一个已打开的文件, 该方法没有返回值。
应用程序/用户 文件对象/文件句柄=================》遥控器
操作系统 打开文件a.txt============》空调
硬件 硬盘
四、打开文件路径
绝对路径
绝对路径是指目录下的绝对位置,直接到达目标位置,通常是从盘符开始的路径。完整的描述文件位置的路径就是绝对路径,以web站点根目录为参考基础的目录路径。
windows系统 r"\"
data_txt = open(r"C:\Users\S\Desktop\userdata.txt", mode="rt", encoding="utf-8")
datas = data_txt.read()
userdata_list = datas.split("\n")
linux系统 “/”
data_txt = open("C:/Users/S/Desktop/userdata.txt", mode="rt", encoding="utf-8")
相对路径
相对路径就bai是指由这个文件所在的路du径引起的跟其它文件(或zhi文件夹)的路径关系。使用相对路径可以dao为我们带来非常多的便利。
windows系统 r"\"
data_txt = open(r"Desktop\userdata.txt", mode="rt", encoding="utf-8")
datas = data_txt.read()
userdata_list = datas.split("\n")
linux系统 “/”
data_txt = open("Desktop/userdata.txt", mode="rt", encoding="utf-8")
\userdata.txt", mode=“rt”, encoding=“utf-8”)
datas = data_txt.read()
userdata_list = datas.split("\n")
##### linux系统 "/"
```python
data_txt = open("Desktop/userdata.txt", mode="rt", encoding="utf-8")
本文地址:https://blog.csdn.net/A1L__/article/details/107368112
下一篇: 荐 机器人路径规划之Dijkstra算法