字符编码
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字符编码 文件处理的更多相关文章

  1. Python 字符编码-文件处理

    .read #读取所有内容,光标移动到文件末尾.readable #判断文件是否可读.readline #读取一行内容,光标移动到第二行首部.readlines #读取每一行内容,存放于列表中.wri ...

  2. Day 08 字符编码

    字符编码 计算机基础 启动应用程序 1.双击QQ 2.操作系统接受指定然后把该操作转化为0和1发送给CPU 3.CPU接受指令然后把指令发给内存 4.内存接受指令把指令发送给硬盘获取数据 5.QQ在内 ...

  3. python字符编码-文件操作

    字符编码 字符编码历史及发展 为什么有字符编码 ''' 原因:人们想要将数据存入计算机 计算机的能存储的信息都是二进制的数据 内存是基于电工作的,而电信号只有高低频两种,就用01来表示高低电频,所以计 ...

  4. day 08 字符编码和文件的读写操作

    打开文件的语法 f=open("test.txt",encoding=:"utf-8") #给系统发送一个指令,让操作系统去打开文件 使用上面的方法打开文件的方 ...

  5. python第二周数据类型 字符编码 文件处理

    第一数据类型需要学习的几个点: 用途 定义方式 常用操作和内置的方法 该类型总结: 可以存一个值或者多个值 只能存储一个值 可以存储多个值,值都可以是什么类型 有序或者无序 可变或者不可变 二:数字整 ...

  6. nls 字符编码文件对应的国家语言

    原文 http://ftp.twaren.net/cpatch/faq/tech/tech_nlsnt.txt * updated by Kii Ali, 12-11-2001 ftp://ftp.n ...

  7. Python自动化开发 - 字符编码、文件和集合

    本节内容 字符编码 文件操作 集合 一.字符编码 1.编码 计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.解决思路:数字与符号建立一对一映射,用不同数字表示不同符号. ASCI ...

  8. python开发基础之字符编码、文件处理和函数基础

    字符编码 为什么要有字符编码? 字符编码是为了让计算机能识别我们人写的字符,因为计算机只认识高低电平,也就是二进制数"0","1". 一个文件用什么编码方式存储 ...

  9. 员工管理系统+字符编码+Python代码文件操作

    员工管理系统+字符编码+Python代码文件操作 1.员工管理系统 1.1  debug 代码调试 1.先使用鼠标左键在需要调试的代码左边点击一下(会出现一个红点)2.之后右键点击debug运行代码 ...

随机推荐

  1. luogu P4183 [USACO18JAN]Cow at Large P

    传送门 首先考虑N^2做法,每次从一个点出发,如果到达一个点,然后到达这个点的时间\(\le\)离这个点最近的叶子距离\(di_x\),那么答案+1,否则继续找点 这个暴力很不好优化.可以这样认为,如 ...

  2. 第26月第23天 nsobject 单例 CFAbsoluteTimeGetCurrent

    1.nsobject 单例 sudo chmod 666 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/ ...

  3. 安装LDAP用户认证

    LDAP伺服器设定 1.安装 openldap-servers yum -y install openldap openldap-devel openldap-servers 2.建立 LDAP 密码 ...

  4. ES学习

    官方参考手册 https://www.elastic.co/guide/en/elasticsearch/reference/5.6/index.html https://www.elastic.co ...

  5. Struts2-052 漏洞复现

    s2-052漏洞复现 参考链接: http://www.freebuf.com/vuls/147017.html http://www.freebuf.com/vuls/146718.html 漏洞描 ...

  6. vue 学习笔记—Es6

    // 第一部分 /* console.log(a+'c'); var a = 1; console.log(b+'c'); let b =1; */ // 上述代码 left定义报错 原因: /* v ...

  7. Light oj 1099 - Not the Best 次短路

    题目大意:求次短路. 题目思路:由于可能存在重边的情况所以不能采用邻接矩阵储存图,我用了邻接表来存图. 由起点S到终点E的次短路可能由以下情况组成: 1.S到v点的次短路 + v到E的距离 2.S到v ...

  8. webgl开发中添加IIS的mime类型

    1.在iis中直接设置 .obj application/octet-stream .mtl application/octet-stream 2.在配置文件中加 <?xml version=& ...

  9. cosmic_download-AsyncPool待修正

    # !/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/11/16 10:02 AM # @Author : cxa # @File ...

  10. HttpResonse 要记得关闭

    写了一个小程序,要识别网站上的图片,用到HttpRequest发请求,HttpResponse接受返回数据.刚开始循环可以跑两个,但是总是提示超时.后来查资料发现,在Http协议中,规定了同个Http ...