Python基础(字符编码与文件处理)
一、了解字符编码的知识储备
1、计算机基础知识(三副图)

2、文本编辑器存取文件的原理(notepad++,Pycharm,word)
打开编辑器就启动了一个进程,是在内存中运行的,所以在编辑器写的内容在没保存之前都是存放在内存中的,断电后数据就会丢失。因而需要保存到硬盘上,点击保存按钮,就从内存中把数据刷到硬盘上。
3、Python解释器执行py文件的与原理,例如python test.py
第一阶段:python解释器启动,此时就相当于启动了一个文本编辑器。
第二阶段:python解释器相当于文本编辑器,去打开test.py文件,从硬盘将test.py的文件内容读到内存中。
第三阶段:python解释器解释执行刚刚加载到内存中test.py的代码。(PS:在该阶段,即执行时,才会识别python的语法,执行文件内代码,执行到name='tracy',会开辟内存空间存放字符串'tracy')
总结:python解释器与文本编辑器的异同
相同点:python解释器是执行文件内容的,因而python解释器具备都py文件的功能,这一点与文本编辑器一样
不同点:文本编辑器将文件内容读入内存后,是未来显示/编辑,而python解释器将文件读入内存后,是为了执行(识别python语法)
二、什么是字符编码
计算机要想工作必须通电,也就是说电驱使计算机干活,而电的特性,就是高低电平。(高低电平即二进制数1,低电平即二进制0),也就是说计算机只认识数字。
如何能让计算机读懂人类的字符?
字符----->(翻译过程)------>数字
这个过程实际就是一个字符如何对应一个特定数字的标准,这个标准称之为字符编码。
三、字符编码的发展史
阶段一:现代计算机起源于美国,最早诞生也是基于英文考虑的ASCII
ASCII:一个Bytes代表一个字符(英文字符/键盘上的所有其他字符),1Bytes=8bit,8bit可以表示0-2**8-1种变化,即可表示256个字符。
阶段二:为了满足中文,中国人定制了GBK
GBK:2Bytes代表一个字符
阶段三:日本人定制了Shift_JIS,韩国人定制了Euc-kr等等
小结:各国有各国的标准,就会有不可避免的冲突,结果就是,在多语言混合的文本中,显示出来就会有乱码。
于是产生了Unicode,同意用2B有特色代表一个字符,2**16-1=65535,可代表6万多个字符,因而兼容万国语言。
但是对于通篇都是英文的文本来说,这种编码方式无疑是多了一倍的存储空间。于是产生了utf-8,对英文字符只用1Bytes表示,对中文字符用3Bytes表示。
unicode特性:简单粗暴,所有字符都是2Bytes,优点是字符->数字的转换速度快,缺点是占用空间打。
utf-8特性:精准,对不同的字符用不同的长度表示,有点是节省空间,缺点是:字符-->数字的转换速度慢,因为每次都需要计算出字符需要多长的Bytes才能够准确表示。
内存中使用的编码是Unicode,用空间换时间。
硬盘中或者网络传输用utf-8,网络I/O延迟或者磁盘I/O延迟要远大于utf-8的转换延迟,而且I/O应该是尽可能地节省带宽,保证数据传输的稳定性。
四、字符编码的使用
文本编辑器转换图
Unicode--->encode----->utf-8
uft-8--------->decode----->Unicode

分析字符转换过程:
文件从内存刷到硬盘的操作简称存文件
文件从硬盘读到内存的操作简称读文件
分析乱码:
1、存文件时就已经乱码的情况;
2、存文件时不乱码而读文件时乱码;
小结:
无论是何种编辑器,要防止文件出现乱码(请一定注意,存放一段代码的文件也仅仅只是一个普通文件而已,此处指的是文件没有执行前,我们打开文件时出现的乱码)
核心法则就是,文件以什么编码保存的,就以什么编码方式打开。
python2默认ASCII,python3默认utf-8,除非文件头部指定编码方式。
针对python3如下图;

在浏览网页的时候,服务器会吧动态生成的Unicode内容转换为UTF-8再传输到浏览器

如果服务端encode的编码格式是utf-8,客户端内存中收到的也是uft-8编码的二进制。
在python3中也有两种字符串类型str和bytes
str是Unicode
#coding:utf-8
s='林' #当程序执行时,无需加u,'林'也会被以unicode形式保存新的内存空间中, #s可以直接encode成任意编码格式
s.encode('utf-8')
s.encode('gbk') print(type(s)) #<class 'str'>
bytes是bytes
#coding:utf-8
s='林' #当程序执行时,无需加u,'林'也会被以unicode形式保存新的内存空间中, #s可以直接encode成任意编码格式
s1=s.encode('utf-8')
s2=s.encode('gbk') print(s) #林
print(s1) #b'\xe6\x9e\x97' 在python3中,是什么就打印什么
print(s2) #b'\xc1\xd6' 同上 print(type(s)) #<class 'str'>
print(type(s1)) #<class 'bytes'>
print(type(s2)) #<class 'bytes'>
总结:
字符编码
python2 str --> bytes ascii
python3 str --> unicode
文件处理
r读 光标文件开头 不会影响文件内容
w写 光标在文件开头 打开文件的时候文件即被清空
a追写 光标在文件末尾 不会影响文件内容
r+可读可写 光标在文件开头
w+可写可读 光标在文件开头 打开文件的时候文件即被清空
a+追加可读 光标在文件末尾
带b 上面的6种模式都可以+b
#只读方式打开文件,读
#f = open('复习.py','r',encoding='utf-8')
#f文件+句柄 能操作文件的一个东西
#for i in f:
# print(i,end='')
#写方式打开文件
# f = open('复习2.py','w',encoding='utf-8')
#可写可读 打开文件的时候文件就为空,写的是任意内容,读的是刚刚写进去的内容
#要想读,先移动光标
#读的光标和写的光标是两回事
# f = open('复习2.py','w+',encoding='utf-8')
# f.write('12237yuiayi')
# #seek 制定光标的位置在0位置
# f.seek(0)
# print(f.read(3))
# f.write('kahkshldkhd')
# print('***',f.read())
# f.close()
#可读可写
# f = open('复习2.py','r+',encoding='utf-8')
# print(f.read())
# f.write('\najshdjkdjk')
# f.close()
#追加可读
f = open('复习2.py','a+',encoding='utf-8')
f.seek(0)
print(f.read())
Python基础(字符编码与文件处理)的更多相关文章
- python基础--字符编码以及文件操作
字符编码: 1.运行程序的三个核心硬件:cpu.内存.硬盘 任何一个程序要是想要运算,肯定是先从硬盘加载到当前的内存中,然后cpu根据指定的指令去执行操作 2.python解释器运行一个py文件的步骤 ...
- Python基础-字符编码与转码
***了解计算机的底层原理*** Python全栈开发之Python基础-字符编码与转码 需知: 1.在python2默认编码是ASCII, python3里默认是utf-8 2.unicode 分为 ...
- Python之字符编码与文件操作
目录 字符编码 Python2和Python3中字符串类型的差别 文件操作 文件操作的方式 文件内光标的移动 文件修改 字符编码 什么是字符编码? ''' 字符编码就是制定的一个将人类的语言的字符与二 ...
- Python入门基础--字符编码与文件处理
字符编码 文本编辑器存取文件的原理 #1.打开编辑器就打开了启动了一个进程,是在内存中的,所以,用编辑器编写的内容也都是存放与内存中的,断电后数据丢失 #2.要想永久保存,需要点击保存按钮:编辑器把内 ...
- python基础-----字符编码
1.ASCII ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现 ...
- what's the python之字符编码与文件处理
用文本编辑器打开一个文件就是把一个文件读入了内存中 ,所以打开文件的操作也是在内存中的,断电即消失,所以若要保存其内容就必须点击保存让其存入硬盘中 python解释器执行py文件的原理 : 第一阶段: ...
- 第2章 Python基础-字符编码&数据类型 字符编码&字符串 练习题
1.简述位.字节的关系 位(bit)是计算机中最小的表示单元,数据传输是以“位”为单位的,1bit缩写为1b 字节(Byte)是计算机中最小的存储单位,1Byte缩写为1B 8bit = 1Byte ...
- 第2章 Python基础-字符编码&数据类型 购物车&多级菜单 作业
作业 一.三级菜单 数据结构: menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, ...
- 第2章 Python基础-字符编码&数据类型 列表&元祖 练习题
1.创建一个空列表,命名为names,往里面添加old_driver,rain,jack,shanshan,peiqi,black_girl元素 names = ["old_driver&q ...
随机推荐
- CF987C Three displays【一维DP/类似最大子序列和】
[链接]:CF987C [分析]:先求出每个s[i]后面比s[i]大的c[i]的最小值,然后枚举前两个数c(i),c(j)以及 j 后面递增且存在最小值的dp(j) [代码]: #include< ...
- ZOJ18th省赛 Lucky 7
[线上网址](http://acm.zju.edu.cn/onlinejudge/showContestProblems.do?contestId=378) BaoBao has just found ...
- 贪心+数学【p3156】 [CQOI2011]分金币 ([HAOI2008]糖果传递)
题目描述 圆桌上坐着n个人,每人有一定数量的金币,金币总数能被n整除.每个人可以给他左右相邻的人一些金币,最终使得每个人的金币数目相等.你的任务是求出被转手的金币数量的最小值. 分析: 设: 每个人最 ...
- bzoj 1879: [Sdoi2009]Bill的挑战
题目链接 bzoj 1879: [Sdoi2009]Bill的挑战 题解 n<=15,装压吧 对所有字符串进行装压 可以预处理一个数组can[i][j]表示所有的字符串中,有哪些可以在第i位匹配 ...
- luogu P1195 口袋的天空
题目背景 小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空. 有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖. 题目描述 给你云朵的个数N,再给你M个关系,表示哪些云朵可以连在 ...
- POJ 3368 Frequent values(线段树区间合并)
[题目链接] http://poj.org/problem?id=3368 [题目大意] 有一个有序序列,要求区间查询出现次数最多的数 [题解] 维护每个区间左端点和右端点,以及左右的长度,还有区间的 ...
- 【bzoj1085】【 [SCOI2005]骑士精神】启发式剪枝+迭代加深搜索
(上不了p站我要死了,侵权度娘背锅) 如果这就是启发式搜索的话,那启发式搜索也不是什么高级玩意嘛..(啪啪打脸) Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且 ...
- Codeforces Round #228 (Div. 1) 388B Fox and Minimal path
链接:http://codeforces.com/problemset/problem/388/B [题意] 给出一个整数K,构造出刚好含有K条从1到2的最短路的图. [分析] 由于是要自己构造图,当 ...
- Python学习笔记——常量和变量
数字常量 如下是python的一些常量表示形式: 2 整数 3.23 浮点数 52.3e-4 科学技术法表示的浮点数 -5 -4.6j ...
- Visio中如何让重叠图形都显示
如图,两个矩形重叠部分的边框都显示了,是拆分操作,不是组合.