day 08字符编码 文件处理
字符编码
1、软件启动流程(打开notepad++文档)
从硬盘将软件加载到内存上
加载test.txt到内存中
执行notepad++的代码,将test.txt打到屏幕上
python解释器也是一个应用软件
从硬盘将软件加载到内存上
加载test.py文件读到内存
解释器解析python语法
文本编辑器与解释器打开文件的前两个阶段的是一致的,仅第三个阶段不同
什么是字符编码?字符编码表
编码:按照某种规范将数据转换为二进制
为什么要编码?
计算机只能识别0和1,那么使用计算机就必须使用二进制的方式告诉计算机
这是一个复杂的过程,所以需要一种解决的方法让计算机识别人类的语言
字符编码的发展史
1、美国使用Ascii编码表
2、其他的国家也需要使用计算机,于是每个国家都推出自己的编码表
中国-GBK
日本-shift-j
因为每个编码表互补兼容,导致乱码
3、为了统一全世界产生Unicode编码(万国编码)
1、统一全世界的编码
2、必须还兼容之前的GBK、shift-j编码
Ascii:用八个二进制位(一个字节bytes)
1111 1111 2**8=255
GBK:英文字母在GBK中占一个字节
中文占两个字节 16个二进制位 2**16-1=65535
你Y好
1111 1111 1111 1111
如果一个字节的首位为1,表示一个中文
如果一个字节的首位为0,表示一个英文
GBK 不仅仅要存储数据,还要计算每个符号
unicode:无论是英文还是其他字符,都是两个字节
为什么这么设计
1、是为了提高效率,而采取的空间换时间
缺点:
2、浪费硬盘空间,降低网络传输效率
为了解决上述unicode退出UTF-8
utf-8是可变长的
英文占一个字节
中文占三个字节
与GBK相同的是,都需要计算存几个字节,所以不适合内存
使用与:硬盘和网络传输
结论:内存中用unicode,硬盘或网络传输中用utf-8
用户驶入->内存(unicode)->转换为(utf-8)->硬盘 该过程为编码就是字符转换为二进制的过程
硬盘上的a.txt(utf-8的二进制)-> unicode的二进制-查编码表得到符号--显示到屏幕上
该过程称之为解码,把二进制转化为符号
乱码问题?
1、存储是与取出时使用的编码不一致,只要找到正确的编码数据还可以恢复
2、存的时候就已经乱了(文档中的内容超出了采用的编码表的范围),数据将丢失解决方法是用utf-8编码表
如何解决文件乱码问题
python在执行代码之前必须从硬盘加载到内存,硬盘中都是二进制,必须要用UNICODE编码表
name解释器怎么知道你采用的什么编码方式?
如果不明确自定,解释器将采用默认的解码方式,在python3中默认的是UTF-8字符编码,在python2中默认的ASCII码
当你使用pathon中则需要手动指定编码方式 设置文件头 #coding:utf-8
name=u'张全蛋‘
#u 表示将这个变量存储为unicode 编码,可以防止取出变量时乱码
1个16进制=0.5个字节
encode unicode =>utf-8 将Unicode的字符转化为二进制
decode utf-8 ->unicode 将二进制转化为Unicode
文件处理:
文件是什么?
文件是操作系统提供的虚拟概念
文件这个概念的自所以出现是为了简化对硬盘的操作
学习文件处理是为了将数据永久保存
1、打开文件
f=open('test.txt,encoding='utf-8))#是给操作系统一个指令,让操作系统去打开文件,应为应用程序无法直接控制硬盘
2、读取内容
data=f.read()
print(data)
# 使用循环 来读取全部内容 方式1
# with open(r"D:\sh_fullstack_s6\day8\代码\test.txt",mode="r",encoding="utf-8") as f:
# while True:
# line = f.readline()
# if not line: # 如果line为空则表示没有内容了
# print("\n没有内容啦!")
# break
# print(line,end="") # 使用循环 来读取全部内容 方式2
# with open(r"D:\sh_fullstack_s6\day8\代码\test.txt",mode="r",encoding="utf-8") as f:
# for line in f:
# print(line,end="") # 一次性读取全部
# with open(r"D:\sh_fullstack_s6\day8\代码\test.txt",mode="r",encoding="utf-8") as f:
# print(f.readlines()) # 会将每一行放入列表中
3、关闭文件
f.close()
总结:open read close 等都是在给操作系统发送指令
打开文件的语法二:在with 代码执行完毕后会自动调用close
with open('test.txt') as f:
data=f.read()
参数1 文件路径 可以相对,也可以是绝对
mode 打开文件的模式 r(只读)
w(只写)
# 注意在w模式下 一旦打开文件 立即清空原来的内容 如果文件不存在则创建新文件
# 写入字符串时需要手动拼接换行符
with open(r"D:\sh_fullstack_s6\day8\代码\test.txt",mode="w",encoding="utf-8") as f:
f.write("爱根\n")
print(f.writable())
f.writelines("\n".join(["abc","cba","nba"]))
# f.writelines({"name":"bgon","age":20})
pass #
with open("新文件.txt",mode="w")as f:
pass
+(可读可写)了解即可
+ 表示可读可写模式
w+ 清空原文件,如果不存在则创建
r+ 如果不存在则报错
a+ 如果不存在则创建,光标移动到最后
可读可写:可用于文本处理,但对于写别的文件,一般不用,容易造成文件的破坏打不开
Windows默认
读取内容:可以用参数指定要读取的个数,默认为-1表示全部读取
需要注意read(-1)仅限于文件较小时,如果内存过大会造成内存溢出
data=f.read(2000)
读取相关函数
read()读取全部
read(size)读取指定大小
readlines ()读取全部
readline()读一行
readable()判断是否可读
注意在w模式写,一旦打开文件 立即清空原来的文件,如果文件不存在则创建一个新文件
在操作非文本文件时,(读一个图片)必须明确指定模式为字节模式
b 用来指定为字节模式
b必须与r/w连用 rb/wb
注意、
b必须与r/w连用 rb/wb
当模式为字节模式时,不能指定encoding参数
默认情况下,读写文本模式,也就是t模式,同样需要与r/w连用
t模式下python解释器会自动转码解码而b模式不会
当模式为字节模式时单位为字节
在b模式下只能写入字节
print(data)
f.close()
print(f.readable())判断是否可读
print(f.wrireable())判断是否可写
a表示追加写入模式,不会清空原数据,会自动把光标移到最后
with open (r'文件路径’,‘at’(文档模式)/'ab'(b模式),encoding='utf-8')
控制文件的打开模式
r\w\a\+
控制操作文件内容的模式
t\b
t\b必须与打开模式连用
各种组合如下:
rt、wt、at、rb、wb、ab、r+、w+、a+
关于文件操作的常用函数
read
readline
readlines
readable
write
writelines
writeable
关于编码的两个函数
encode 编码
decode 解码
day 08字符编码 文件处理的更多相关文章
- Python 字符编码-文件处理
.read #读取所有内容,光标移动到文件末尾.readable #判断文件是否可读.readline #读取一行内容,光标移动到第二行首部.readlines #读取每一行内容,存放于列表中.wri ...
- Day 08 字符编码
字符编码 计算机基础 启动应用程序 1.双击QQ 2.操作系统接受指定然后把该操作转化为0和1发送给CPU 3.CPU接受指令然后把指令发给内存 4.内存接受指令把指令发送给硬盘获取数据 5.QQ在内 ...
- python字符编码-文件操作
字符编码 字符编码历史及发展 为什么有字符编码 ''' 原因:人们想要将数据存入计算机 计算机的能存储的信息都是二进制的数据 内存是基于电工作的,而电信号只有高低频两种,就用01来表示高低电频,所以计 ...
- day 08 字符编码和文件的读写操作
打开文件的语法 f=open("test.txt",encoding=:"utf-8") #给系统发送一个指令,让操作系统去打开文件 使用上面的方法打开文件的方 ...
- python第二周数据类型 字符编码 文件处理
第一数据类型需要学习的几个点: 用途 定义方式 常用操作和内置的方法 该类型总结: 可以存一个值或者多个值 只能存储一个值 可以存储多个值,值都可以是什么类型 有序或者无序 可变或者不可变 二:数字整 ...
- nls 字符编码文件对应的国家语言
原文 http://ftp.twaren.net/cpatch/faq/tech/tech_nlsnt.txt * updated by Kii Ali, 12-11-2001 ftp://ftp.n ...
- Python自动化开发 - 字符编码、文件和集合
本节内容 字符编码 文件操作 集合 一.字符编码 1.编码 计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.解决思路:数字与符号建立一对一映射,用不同数字表示不同符号. ASCI ...
- python开发基础之字符编码、文件处理和函数基础
字符编码 为什么要有字符编码? 字符编码是为了让计算机能识别我们人写的字符,因为计算机只认识高低电平,也就是二进制数"0","1". 一个文件用什么编码方式存储 ...
- 员工管理系统+字符编码+Python代码文件操作
员工管理系统+字符编码+Python代码文件操作 1.员工管理系统 1.1 debug 代码调试 1.先使用鼠标左键在需要调试的代码左边点击一下(会出现一个红点)2.之后右键点击debug运行代码 ...
随机推荐
- luogu P3244 [HNOI2015]落忆枫音
传送门 md这题和矩阵树定理没半毛钱关系qwq 首先先不考虑有环,一个\(DAG\)个外向树个数为\(\prod_{i=2}^{n}idg_i(\)就是\(indegree_i)\),因为外向树每个点 ...
- CSS面试复习(二):CSS的使用
一.CSS基础 1.选择器 选择器{ 属性:值: 属性:值 } 作用:用于匹配HTML元素.分类和权重.解析方式和性能.值得关注的选择器 分类: 元素选择器a{} 伪元素选择器::before{} 类 ...
- python之读写文件
1. 读取文件数据,文件必须存在才可以读且如要读取的文件不和当前.py在同一个包下,需要特别指定此文件路径才行 f=open('test.txt',encoding='utf-8')#填写文件路径,打 ...
- vue-CLI踩坑记
vue init webpack vue-demo 使用 windows 7 DOS命令行和gitbash都有选择和实际选择结果不一致的问题, DOS命令行只在 Vue build有问题, gitba ...
- call 和 apply 的区别
call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向.因为 JavaScript 的函数存在「定义时上下文」和「 ...
- ssm框架所需jar包整理及各jar包的作用
以下是我目前新搭建的ssm项目的pom.xml 之后如果需要其他的话再加 <?xml version="1.0" encoding="UTF-8"?> ...
- P1880 [NOI1995]石子合并(区间DP)
题目链接:https://www.luogu.org/problemnew/show/P1880 题目大意:中文题目 具体思路:和上一篇的思路是差不多的,也是对于每一个小的区间进行处理,然后再归并到大 ...
- Solr 7.7.0 部署到Tomcat
第一步 1.Solr 解压后server/solr-webapp下一个webapp目录,它就是Solr的Web项目,把它复制到tomcat的webapps目录下并改名为solr # 进入Solr的se ...
- RabbitMQ channel 参数详解
1.Channel 1.1 channel.exchangeDeclare(): type:有direct.fanout.topic三种durable:true.false true:服务器重启会保留 ...
- cartographer 分析
原文链接:http://blog.csdn.net/zyh821351004/article/details/52421005 cartographer与karto的比较 1. 两者采取的都是图优化框 ...