字符编码

人操作计算机使用人类认识的字符,而计算机存放都是二进制数字
所以人在往计算机里输入内容的时候,必然发生:
                  人类的字符------(字符编码表)--------》数字

比如我输入一个‘上’的中文字,但是计算机不认识,所以必然需要一个编码表,一边写着计算机认识的二进制和与之一一对应的字符。

然后,再将你输入的字符对应的二进制写进内存,再由内存写入硬盘。

在这之间只有一种编码表

ASCII:只能表示英文字符,用1Bytes对应一个英文字符
内存:ASCII
硬盘:ASCII

GBK:可以表示中文和英文字符,用1Bytes对应一个英文字符,2Bytes对应一个中文字符
内存:GBK
硬盘:GBK

Shift-JIS:
内存:Shift-JIS
硬盘:Shift-JIS

Euc-kr:
内存:Euc-kr
硬盘:Euc-kr

以上是各个国家的字符编码,但是这种字符编码只能在自己的国家使用,所以之后出现了一种统一的字符编码

unicode: 可以对应万国字符,统一用2Bytes对应一个字符

  两大特点:
    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

保证不乱码的关键:

1 字符当初以什么编码的,就应该以什么编码取解码

强调:此时计算机只使用unicode与字符的对应关系

在python2中:

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 为何要用文件

用户/应用程序对文件的读写操作会由操作系统转换成具体的硬盘操作
所以用户/应用程序可以通过简单的读\写文件来间接地控制复杂的硬盘的存取操作
实现将内存中的数据永久保存到硬盘中

user=input('>>>>: ') #user="egon"

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: 只读模式L(默认的)

w: 只写模式

a: 只追加写模式

5.控制读写文件单位的方式(必须与r\w\a连用)

t : 文本模式(默认的),一定要指定encoding参数
优点: 操作系统会将硬盘中二进制数字解码成unicode然后返回
强调:只针对文本文件有效

with open('a.txt',mode='rt',encoding='utf-8') as f:
data=f.read()
print(data,type(data)) with open('1.png',mode='rt',encoding='utf-8') as f:
data=f.read()

b: 二进制模式,一定不能指定encoding参数

with open('1.png',mode='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')

07-Python入门学习-字符编码与文件处理的更多相关文章

  1. Python入门基础--字符编码与文件处理

    字符编码 文本编辑器存取文件的原理 #1.打开编辑器就打开了启动了一个进程,是在内存中的,所以,用编辑器编写的内容也都是存放与内存中的,断电后数据丢失 #2.要想永久保存,需要点击保存按钮:编辑器把内 ...

  2. python 基础之字符编码和文件处理

    一.字符编码 (1)计算机基础知识 (2)python 解释器执行py文件的原理 <1>python 解释器启动 <2>python解释器相当于一个文本编辑器,打开txt.py ...

  3. Python全栈开发之路 【第三篇】:Python基础之字符编码和文件操作

    本节内容 一.三元运算 三元运算又称三目运算,是对简单的条件语句的简写,如: 简单条件语句: if 条件成立: val = 1 else: val = 2 改成三元运算: val = 1 if 条件成 ...

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

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

  5. python数据类型、字符编码、文件处理

    介绍: 1.什么是数据? 例:x=10,10是我们要存储的数据 2.为何数据要分不同的类型? 数据是用来表示状态的,不同的状态用不同的类型的数据去表示 1.数据类型 1.数字(整形,长整形,浮点型,复 ...

  6. Python基础之字符编码,文件操作流与函数

    一.字符编码 1.字符编码的发展史 阶段一:现代计算机起源于美国,最早诞生也是基于英文考虑的ASCII ASCII:一个Bytes代表一个字符(英文字符/键盘上的所有其他字符),1Bytes=8bit ...

  7. Python 入门学习(贰)文件/文件夹正则表达式批量重命名工具

    基于 Udacity 的 Python 入门课程 Programming Foundations with Python 基于 Python 2.7 思路 Project 2 是一个去除文件名中所有数 ...

  8. 二、python数据类型、字符编码、文件处理

    一. 前言 1. 什么是数据: x = 10,10就是我们要存储的数据 2. 为何数据要分不同的类型 数据是用来表示状态的, 不同的状态就应该用不同类型的数据去表示 3. 数据类型 数字(整型.长整型 ...

  9. Python入门之字符编码

    一.字节编码的基础知识 一.计算机基础知识 #1 我们的程序都是运行在特定的操作系统内,例如window,linux,mac等等#2 运行应用程序,需要要操作系统发出请求,我们双击运行的时候会向操作系 ...

随机推荐

  1. Django---ORM框架

    一.get请求和post请求 GET请求: 1. 浏览器请求一个页面2. 搜索引擎检索关键字的时候 POST请求:1. 浏览器向服务端提交数据,比如登录/注册等 HTTP中GET与POST的区别 ht ...

  2. web.xml:<dispatcher>

    web.xml 的 <dispatcher> 是 <filter-mapping> 下的子标签,指定 Filter 对应的请求方式,其可选值如下: REQUEST 客户端在地址 ...

  3. Centos 7 最小化kvm部署

    1.检查CPU是否支持虚拟化 sh-4.2# grep -E '(vmx|svm)' /proc/cpuinfo # 若是无任何显示,则表示CPU不支持kvm虚拟化 2.关闭selinux sh-4. ...

  4. Tomcat设计模式

    omcat 系统架构与设计模式,第 2 部分 设计模式分析 系列内容: 此内容是该系列 2 部分中的第 2 部分: Tomcat 系统架构与设计模式 门面设计模式 门面设计模式在 Tomcat 中有多 ...

  5. CentOS7.2 设置静态ip

    先找到配置文件: [root@localhost bin]# cd /etc/sysconfig/network-scripts [root@localhost network-scripts]# l ...

  6. vue开发常用插件

    dependencies axios // 用于请求数据 better-scroll // 用于处理页面列表的滚动,下拉刷新等 fastclick // 用于处理移动设备点击会有300毫秒延迟的问题 ...

  7. ACM-ICPC 2018 徐州赛区网络预赛 H Ryuji doesn't want to study (树状数组差分)

    https://nanti.jisuanke.com/t/31460 题意 两个操作.1:查询区间[l,r]的和,设长度为L=r-l+1, sum=a[l]*L+a[l+1]*(L-1)+...+a[ ...

  8. [物理学与PDEs]第1章第2节 预备知识 2.3 Faraday 电磁感应定律

    1.  Faraday 电磁感应定律: 设 $l$ 为任一闭曲线, 则 $$\bex \oint_l{\bf E}\cdot\rd {\bf l} =-\int_S \cfrac{\p {\bf B} ...

  9. 可持久化 trie 的简单入门

    可持久化 $trie$  ....又是一个表里不一的东西..... 可持久化 $trie$  的介绍: 和主席树类似的,其实可持久化就是体现在前缀信息的维护上(搞不懂这怎么就叫做可持久化了...) $ ...

  10. .Net Core---- 通过EPPlus批量导出

    前台代码: 前台代码是在.net core bootstrap集成框架上的(这是效果浏览地址:http://core.jucheap.com[效果地址来自:http://blog.csdn.net/a ...