欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python入门 Day08

程序员文章站 2022-06-11 17:30:15
Day 08一、储备知识阶段一:启动python解释器阶段二:python解释器此时就是一个文本编辑器,负责打开文件test.py,即从硬盘中读取test.py的内容到内存中文本编辑器的原理打开编辑器就打开了启动了一个进程,是在内存中的,所以,用编辑器编写的内容也都是存放与内存中的,断电后数据丢失要想永久保存,需要点击保存按钮:编辑器把内存的数据刷到了硬盘上。在我们编写一个py文件(没有执行),跟编写其他文件没有任何区别,都只是在编写一堆字符而已。python解释器执行py文件的原理...

Day 08

字符编码、文件处理

一、储备知识

阶段一:启动python解释器

阶段二:python解释器此时就是一个文本编辑器,负责打开文件test.py,即从硬盘中读取test.py的内容到内存中

python入门 Day08

文本编辑器的原理

  1. 打开编辑器就打开了启动了一个进程,是在内存中的,所以,用编辑器编写的内容也都是存放与内存中的,断电后数据丢失
  2. 要想永久保存,需要点击保存按钮:编辑器把内存的数据刷到了硬盘上。
  3. 在我们编写一个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-8
1Byte对应文字符
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,直接支持多语言。

strbytes互相转换时,需要指定编码。最常用的编码是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