06 Python字符编码与文件处理
python垃圾回收机制:
python中的垃圾回收机制是以引用计数为主,分代收集为辅,引用计数的缺陷是循环引用的问题,一个对象的引用数为0 ,那么这个对象就会被python虚拟机回收内存
字符编码
字符编码的介绍
计算机存放的都是二级制数字,我们输入一个字符,计算机是不认识的,那么就需要一个编码表,吧我们写入的字符转换为二级制数,然后将输入字符对应的二进制数写入内存,再由内存写入硬盘
在这之间只有一种编码表
ASCII:只能表示英文字符,用1Bytes对应一个英文字符
内存:ASCII
硬盘:ASCII
GBK:可以表示中文字符和英文字符,用1Bytes表示一个英文字符,用2Bytes表示一个中文字符
内存:GBK
硬盘:GBK
Shift-JIS:
内存:Shift-JIS
硬盘:Shift-JIS
Euc-kr:
内存:Euc-kr
硬盘:Euc-kr
以上是各个国家的字符编码,但是这种字符编码只能在自己的国家使用,所以之后出现了一种统一的字符编码
unicode:可以对应万国字符,统一用2个Bytes表示一个字符
两大特点:
1:可以兼容万国字符
2 与万国字符都有一种数字与数字的对应关系
人们写入的字符先转码为unicode编码写进内存,再有硬盘里的GBK、EUC-kr或Shift-JIS编码表进行编码之后写进硬盘
如果要使用,就将字符经过解码,转变为unicode编码,写进内存后再通过unicode编码表一一对应。
GBK数字-----解码decode----->unicode数字
Shift-JIS数字-----解码decode----->unicode数字 GBK数字<-----编码encode-----unicode数字
UTF-8数字<-----编码encode-----unicode数字
不同的字符编码转换为英文和中文对应的字节数如下
字符编码 英文 中文
ASCII 1Bytes 无
GBK 1Bytes 2Bytes
Unicode 2Bytes 2Bytes
Utf-8 1Bytes 3Bytes
保证不乱码的关键
当初用什么字符编码存的,取的时候就用什么编码解码
强调:此时计算机只能使用unicode与字符的对应关系
在pytohn2中
1 (执行python程序的第二个阶段)解释器在将py文件当普通的文本文件读入内存时默认使用的编码是ASCII
2 有两种字符串类型:
str:x="上" # 文件头指定的编码格式的二进制
unicode:x=u"上" # 存成unicode格式的二进制
ps:pyhon2中unicode就是python3的str类型
在python3中:
1 (执行python程序的第二个阶段)解释器在将test.py当普通的文本文件读入内存时默认使用的编码是UTF-8
2 (执行python程序的第三个阶段,开始识别语法),会字符类型的值开辟一个内存空间存入unicode格式的二进制
ps:python3中的str类型是unicode编码的二进制
3 字符串类型
str: x="上" 把‘上’ 存成unicode格式的二进制
字节串=x.encode('utf-8')
文件头:
在文件首行写上:coding:utf-8
就是在告诉python解释器,不要用其默认的编码,用文件头指定的编码
文件处理
1 什么是文件:
文件就是操作系统为用户/操作系统提供的操作硬盘的抽象单位
2 为什么要用文件
实现将内存中的数据永久保存到硬盘中
3 如何用文件
文件操作的基本步骤
f=open(r'a.txt',encoding='utf-8') #打开文件,拿到一个文件对象f,f就相当于一个遥控器,可以向操作系统发送指令
f.read() # 读写文件,向操作系统发送读写文件指令
f.close() # 关闭文件,回收操作系统的资源
强调:一定要在程序结束前关闭打开的文件
上下文管理:
with open('文件路径',mode='打开模式',encoding='编码表') as f:
pass
with结束后会自动关闭文件
4 文件的打开模式
r:只读模式
w:只写模式
a:只追加模式
5 控制读写文件单位的方式(必须与r/w/a连用)
t:文本模式(默认的),一定要指定encoding参数
优点;操作系统会将硬盘中的二进制数字解码城unicode然后返回
强调::只针对文本文件才会有效
whit open('a.txt',mode='rt',encoding = 'utf-8' ) as f:
data = f.read()
print(data,type(data)) with open('f.png','mode=''rt,encoding = 'utf-8')as f:
data = f.read()
二进制模式,一定不能制定encoding参数
with open('q.png','rb')as f:
data = f.read()
print(data,type(data)) with open('a.txt',mode = 'rb') as f:
data = f.read()
print(data,type(data))
print(data.decode('utf-8'))
r: 只读模式L(默认的)
1当文件不存在是,会报错
2 当文件存在时,文件指针指向文件的开头
with open('a.txt',mode='rt',encoding='utf-8') as f:
res1=f.read()
print('111===>',res1)
res2=f.read()
print('222===>',res2) with open('a.txt',mode='rt',encoding='utf-8') as f:
print(f.read())
print(f.readable())
print(f.writable())
print(f.readline())
print(f.readline()) with open('a.txt',mode='rt',encoding='utf-8') as f:
for line in f:
print(line) with open('a.txt',mode='rt',encoding='utf-8') as f:
l=[]
for line in f:
l.append(line)
print(l)
print(f.readlines()
w: 只写模式
1 当文件不存在时,新建一个空文档
2 当文件存在时,清空文件内容,文件指针跑到文件的开头
with open('c.txt',mode='wt',encoding='utf-8') as f:
print(f.readable())
print(f.writable())
print(f.read()) f.write('哈哈哈\n')
f.write('你愁啥\n')
f.write('瞅你咋地\n') f.write('1111\n2222\n333\n4444\n') info=['egon:123\n','alex:456\n','lxx:lxx123\n']
for line in info:
f.write(line)
f.writelines(info) with open('c.txt',mode='rb') as f:
print(f.read()) with open('c.txt',mode='wb') as f:
f.write('哈哈哈\n'.encode('utf-8'))
f.write('你愁啥\n'.encode('utf-8'))
f.write('瞅你咋地\n'.encode('utf-8'))
a: 只追加写模式
1 当文件不存时,新建一个空文档,文件指针跑到文件的末尾
2 当文件存在时,文件指针跑到文件的末尾
with open('c.txt',mode='at',encoding='utf-8') as f:
print(f.readable())
print(f.writable())
f.write('虎老师:123\n')
在文件打开不关闭的情况下,连续的写入,下一次写入一定是基于上一次写入指针的位置而继续的
with open('d.txt',mode='wt',encoding='utf-8') as f:
f.write('虎老师1:123\n')
f.write('虎老师2:123\n')
f.write('虎老师3:123\n') with open('d.txt',mode='wt',encoding='utf-8') as f:
f.write('虎老师4:123\n') with open('d.txt',mode='at',encoding='utf-8') as f:
f.write('虎老师1:123\n')
f.write('虎老师2:123\n')
f.write('虎老师3:123\n') with open('d.txt',mode='at',encoding='utf-8') as f:
f.write('虎老师4:123\n')
06 Python字符编码与文件处理的更多相关文章
- Python 字符编码及其文件操作
本章节内容导航: 1.字符编码:人识别的语言与机器机器识别的语言转化的媒介. 2.字符与字节:字符占多少个字节,字符串转化 3.文件操作:操作硬盘中的一块区域:读写操作 注:浅拷贝与深拷贝 用法: d ...
- python字符编码与文件打开
一 字符编码 储备知识点: 1.计算机系统分为三层: 应用程序 操作系统 计算机硬件 2.运行Python程序的三个步骤 1.先启动python解释器 2.再将python文件当做普通的文本文件读入内 ...
- python字符编码和文件处理
一.了解字符编码的知识储备 1.文本编辑器存取文件的原理(nodepad++,python,word) 打开编辑器就打开了启动了一个进程,是在内存中的,所以,用编辑器编写的内容也都是存放于内存中的,断 ...
- python字符编码与文件操作
目录 字符编码 字符编码是什么 字符编码的发展史 字符编码实际应用 编码与解码 乱码问题 python解释器层面 文件操作 文件操作简介 文件的内置方法 文件的读写模式 文件的操作模式 作业 答案 第 ...
- python基础(三)----字符编码以及文件处理
字符编码与文件处理 一.字符编码 由字符翻译成二进制数字的过程 字符--------(翻译过程)------->数字 这个过程实际就是一个字符如何对应一个特定数字的标准,这个标准称之 ...
- python基础知识5---数据类型、字符编码、文件处理
阅读目录 一 引子 二 数字 三 字符串 四 列表 五 元组 六 字典 七 集合 八 数据类型总结 九 运算符 十 字符编码 十一 文件处理 十二 作业 一 引子 1 什么是数据? x=10,10 ...
- Python之字符编码与文件操作
目录 字符编码 Python2和Python3中字符串类型的差别 文件操作 文件操作的方式 文件内光标的移动 文件修改 字符编码 什么是字符编码? ''' 字符编码就是制定的一个将人类的语言的字符与二 ...
- python字符编码-文件操作
字符编码 字符编码历史及发展 为什么有字符编码 ''' 原因:人们想要将数据存入计算机 计算机的能存储的信息都是二进制的数据 内存是基于电工作的,而电信号只有高低频两种,就用01来表示高低电频,所以计 ...
- python文件操作:字符编码与文件处理
一.字符编码 二.文件处理 一.字符编码 储备知识点: 1. 计算机系统分为三层: 应用程序 操作系统 计算机硬件 2. 运行python程序的三个步骤 1. 先启动python解释器 2. 再将py ...
随机推荐
- JDBC的操作步骤
JDBC的操作步骤 一.什么是JDBC JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问 ...
- 说说 PADS Layout 中的第 20 层和 第 25层
说说 PADS Layout 中的第 20 层和 第 25层 PADA Layout 有一个不成文的说明,第 20 层和第 25 层各有各的用途. 第 20 层是 Placement Outline ...
- php在循环内外实例化类占用内存比较
关于php类的实例化和内存的关系,可以这么说:只要有一个new 关键字就是创建一个对象,创建一个对象就是在内存中分配了一个空间. 代码1: 在循环外实例化类:class ABC{ public $nu ...
- CentOS 6.5 下搭建FastDFS服务
参考网站: http://www.open-open.com/lib/view/open1435468300700.html http://blog.csdn.net/lynnlovemin/arti ...
- PHP 设计模式 原型模式(Prototype)之深/浅拷贝
看PHP 设计模式 原型模式(Prototype)时,衍生出一个扩展问题之 原型拷贝的浅拷贝和深拷贝问题(不管写Java还是写PHP还是写JS时都多多少少遇到过对象拷贝问题) 比如写前端页面时 ...
- java 静态方法上的泛型
靜態方法上的泛型 泛型也可以僅定義在靜態方法上,舉例而言,在 定義與使用泛型 中自定義過支援泛型的ArrayList,如果現在想寫個asArrayList方法,可指定不定長度引數,將之轉換為Array ...
- apache make
https://jingyan.baidu.com/article/7e4409533d7f0f2fc0e2ef91.html 1. apr apr-util http://archive.apach ...
- httpclient跳过https请求的验证
一.因为在使用https发送请求的时候会涉及,验证方式.但是这种方式在使用的时候很不方便.特别是在请求外部接口的时候,所以这我写了一个跳过验证的方式.(供参考) 二.加入包,这里用的是commons- ...
- JMS消息服务模型
JMS--仅仅是一种规范,一种接口规约,一种编程模型.类似的JPA,JSR等 场景: 1.多个系统之间交互,实现可以采取RPC,但是交互复杂,基本就是点对点的方式 2.其实交互就是消息,而JMS就是消 ...
- string ids=aduuids.Aggregate("", (m, n) => m + n+",").TrimEnd(',');
string ids=aduuids.Aggregate("", (m, n) => m + n+",").TrimEnd(',');