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运行代码 ...
随机推荐
- Hadoop思维导图之概述
- #6278. 数列分块入门 2(询问区间内小于某个值 xx 的元素个数)
题目链接:https://loj.ac/problem/6278 题目大意:中文题目 具体思路:数列分块模板题,对于更新的时候,我们通过一个辅助数组来进行,对于原始的数组,我们只是用来加减,然后这个辅 ...
- linux 权限管理
- python,os方法的简单介绍
''' 这一个章节是学习os及os.path的用法 ''' #学习os首先需要引入os文件,imoprt os import os #getcwd()的用法,它是返回当前的工作目录,说白了就是你的程序 ...
- 【转】python3解析库lxml
转自:http://www.cnblogs.com/zhangxinqi/p/9210211.html 阅读目录 1.python库lxml的安装 2.XPath常用规则 (1)读取文本解析节点 (2 ...
- use snippet save dom to excel
1.打开贴吧 http://tieba.baidu.com/f?ie=utf-8&kw=python&fr=search 2.打开console执行下面命令 Array.prototy ...
- [Codeforces671D]Roads in Yusland
[Codeforces671D]Roads in Yusland Tags:题解 题意 luogu 给定以1为根的一棵树,有\(m\)条直上直下的有代价的链,求选一些链把所有边覆盖的最小代价.若无解输 ...
- linux下.bashrc文件 /PATH环境变量修改 /提示符修改
1) .bashrc文件 在linux系统普通用户目录(cd /home/xxx)或root用户目录(cd /root)下,用指令ls -al可以看到4个隐藏文件, .bash_history 记 ...
- maven项目导入war包
导入war包,使用war包中的类和静态资源(css,js,包含jsp等) A项目是被导入的war工程,B项目是需要A项目的一个工程. 在<build>中 <resources> ...
- PHP一维数组转二维数组正则表达式
2017年11月20日17:17:08 array(1 => '哈哈') 变成 array('id' => 1, 'name' => '哈哈') 查找目标: (\d)\s=&g ...