Python自动化开发 - 字符编码、文件和集合
本节内容
字符编码
文件操作
集合
一、字符编码 |
1、编码
计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。解决思路:数字与符号建立一对一映射,用不同数字表示不同符号。
ASCII(American Standard Code for Information Interchange, 美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。
每个bit 有两种状态 0和1,ASCII码使用指定的8位二进制数组合来表示256种可能的字符
大小规则
1) 数字0-9比字母要小, 如"7" < "F";
2) 数字0比数字9要小,并按0到9顺序递增, 如"3" <"8";
3) 字母A比字母Z要小,并按A到Z顺序递增, 如"A" < "Z";
4) 同个字母的大写字母比小写字母要小,如 "A" <" a";
常用ASCII 十进制 "0" = 48、"A"= 65、"a"= 97
中文编码
8为的ASCII能表示的最大整数255,也就是大小写英文字母、数字和一些符号。如果要表示更大的整数,就必须用更多的字节,如两个字节。
为了处理汉字,中国设计了用于简体中文的GB2312和用于繁体中文的big5
发展过程 GB2312(7445个字符) -- GBK(21886个字符) -- GB18030(27484个字符),属于双字节字符集
Windows缺省内码GBK
万国码
Unicode(统一码、万国码、单一码)为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定最少由16位(2个字节)。Python3支持Unicode编码
UTF-8
如果文本全是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。
Unicode编码优化压缩为UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,
ASCII码中的内容用1个字节保存
欧洲的字符用2个字节保存
东亚的字符用3个字节保存
字符 | ASCII | Unicode | UTF-8 |
A | 01000001 | 00000000 01000001 | 01000001 |
中 | -- | 01001110 00101101 | 11100100 10111000 10101101 |
在UTF-8编码中,ASCII编码实际上可以被看成是UTF-8编码的一部分。所以大量只支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作。
Unicode是内存编码表示方案(是规范),而UTF是如何保存和传输Unicode的方案(是实现)
2、Python2.x编码
Python2.x 默认编码为ASSIC, 1989年,先于1991年出现的unicode编码
# -*- coding:utf-8-*- 告诉py的解释器,后面的代码请用utf-8来来解释,对Python2.x非常重要
Python2.x中 UTF-8与GBK相互转换如下图所示
Python2.x 示例
msg = "中国" print msg gbk_str = msg.decode(encoding="utf-8").encode(encoding="gbk") print gbk_str print gbk_str.decode(encoding="gbk").encode("gb2312") print gbk_str.decode(encoding="gbk").encode("utf-8") pirnt gbk_str.decode(encoding="gbk") |
Python2 在windows解码是必须的,编码成gbk这个动作不是必须的
Python2 在linux(默认是utf8)上,如果是gbk-> utf8,解码是必须得,编码成utf-8这个动作不是必须的
所有的程序在内存里默认都是unicode
3、Pyhthon3.x编码
unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节),utf-16就是现在最常用的unicode版本, 传输或存储时用utf-8
Python 3.x 默认文件时 utf-8
Python3 也有两种数据类型:str和bytes,其中str类型存unicode数据,bytse类型存bytes数据
Python3 renamed the unicode type to str ,the old str type has been replaced by bytes.
解释器编码是 unicode,加载到内存后自动解码成unicode,同时,把字符转换成bytes格式
bytes = 8bit
Python2 str == python3 bytes
Python3 str == unicode
Python3 多出来的bytes格式是一个单独的类型
4、文件从磁盘到内存的编码
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。
用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件:
在文本编辑器编辑文字的时候,不管是中文还是英文,计算机都不认识,所以在内存中以unicode数据存在。无论中文、英文、日文、拉丁文,
世界上任何字符它都有唯一编码对应,所以兼容性是最好的。
在磁盘上存储数据的时候,是通过某种编码方式的bytes字节串,比如utf8,可变长编码,节省空间,还有gbk等等。文本编辑器软件都有默认的
保存文件的编码方式,比如utf8、gbk等等。当我们点击保存的时候,这些编辑软件已经“默默地”帮我们做了编码工作。
当我们再打开这个软件时,软件又默默地给我们做了解码工作,将数据再解码成unicode,然后就可以呈现明文给用户了。
unicode是离用户更近的数据,bytes是离计算机更近的数据。
那编码和程序执行有什么关系呢?
先明确一个概念:Python解释器本身就是一个软件,一个类似于文本编辑器一样的软件!
文本编辑器有自己默认的编码解码方式,解释器也有
import sys print sys.getdefaultencoding() # Python2 默认ascii print (sys.getdefaultencoding()) # Python3 默认utf-8 |
是否还记得开头这个声明
# -*- coding:utf-8 -*- |
如何Python2解释器去执行一个utf8编码的文件,就会默认地以ascii去解析utf8,一旦程序中有中文,自然就解码错了。
开头位置声明 # -*- coding:utf-8 -*-,其实就是告诉解释器,不要以默认的编码方式去解码这个文件,而是以utf8解析。
而Python3解释器默认utf8编码,就方便很多了。
二、文件操作 |
open() # encoding不声明,默认使用操作系统的编码来解释文件,如中文Windows的GBK
打开文件模式
r,只读模式(默认),不可写
w,只写模式(不可读;不存在则创建;存在则删除内容,更新为最新内容)
a,追加模式(可读;不存在则创建;存在则只追加内容)
"+"表示可同时读写某个文件
r+,追加 + 读,会覆盖光标后内容,除非定长修改,而 a模式只追加
w+ ,清空原文件,再写入新内容,可读
a+,追加读,从文件末尾
# 实际运用 r w a 较多
基本操作
f = open("text", encoding="utf-8", mode="r") # 读模式打开文件 first_line = f.readline() # 读第一行 second_line = f.readline() # 读第二行 lines = f.readlines(3) # 读三行,返回值为列表 data = f.read() # 读剩下所有内容,文件大时不要用;read(n)有值时,读取相应字符 f.close() # 关闭文件 number = f.tell() # 返回光标所在第几个字节 f.seek(10) # 往后移动相应字节,如10字节 f.write("xxxxx\n") # 写数据到文件 f.flush # 内存数据更新到硬盘 f.fileno() # 操作系统维护的文件列表,文件描述符 |
三、集合 |
集合是一个无序不重复元素的序列。基本功能
去重,列表变集合,自动去重
关系测试,测试两组数据交集、并集、差集等关系
集合定义可以使用大括号{}或者set函数来创建集合
注意:创建一个空集合必须用 set() 而不是 {},因为 {} 是用来创建一个空字典
特性:去重、无序
# 定义集合 去重、无序 set1 = set({}) set2 = set([3, 5, 5, 9]) set3 = {3, 5, 5, 9} set4 = ({3, 5, 5, 9}) # 集合基本操作 set2.add(11) # 集合set2增加元素11 set2.remove(11) # 集合set2删除元素11 len(set4) # 返回集合set4长度 data in set4 # 判断元素data是否存在于集合set4之中 data not in set4 # 判断元素data是否不存在于集合set4之中 set3.issubset(set4) # 判断集合set3中每个元素是否都在集合set4中,即子集判断 set3.issuperset(set4) # 判断集合set3是否包含集合set4中每个元素,即父集判断 # 关系运算 a = {1, 3, 5, 7, 10} b = {2, 3, 5, 6, 8} # 交集,同时在集合a和集合b中的元素集合 print( a & b) print( a.intersection(b)) a.intersection_update(b) # 集合 a 更新为a与b交集 # 差集运算 a - b,只在集合a中,不在集合b中 print( a- b) print(a.difference(b)) a.difference_update(b) # 集合 a 更新为差集 a -b # 同理 差集 b - a # 并集,集合a和集合b总元素集合 print(a | b) print(a.union(b)) # 对称差集,集合a和集合b不重复元素集合 print(a^b) print(a.symmetirc_differece(b) |
转载于:https://www.cnblogs.com/jonathan1314/p/6340976.html
Python自动化开发 - 字符编码、文件和集合相关推荐
- 深入理解Python中的字符编码、文件处理和函数
博客核心内容: 1.Python基础之字符编码的介绍 2.Python中文件处理的介绍 3.Python中函数的介绍 4. File.readlines(sizehint) 函数 一.Python基础 ...
- Python自动化开发【1】:Python简介和入门
Python自动化开发之路 [第1篇]:Python简介和入门 编程与编程语言 一 编程与编程语言python是一门编程语言,作为学习python的开始,需要事先搞明白:编程的目的是什么?什么是编程语 ...
- Python基础—Py字符编码
文章目录 前言 1 计算机基础知识 2 文本编辑器存取文件的原理 3 python解释器执行.py文件的原理 4 总结python解释器与文件本编辑的异同 一.字符编码介绍 1 什么是字符编码 2 P ...
- 老男孩Python自动化开发12期完整版(含作业代码课件)
老男孩Python自动化开发12期完整版(含作业代码课件) 链接:https://pan.baidu.com/s/1zCKn_VjstbCfTYCHCBKZgQ 密码:zujz 转载于:https:/ ...
- Python应用开发——制作bin文件
Python应用开发--制作bin文件 目录 Python应用开发--制作bin文件 前言 1 环境搭建 2 代码编写与测试 结束语 前言 什么是bin? bin是二进制文件,其用途依系统或应用而定. ...
- Python自动化办公学习- 获取文件夹下的所有文档的名字并存储到Excel
Python自动化办公学习- 获取文件夹下的所有文档的名字并存储到Excel 这是我第一次学习使用csdn发布学习笔记,如有版权侵犯,引用不当的地方,请立即提示我,我会删除,谢谢. 笔记中如有解释错误 ...
- Python自动化开发基础 项目实战-监控系统 Day16-李杰-专题视频课程
Python自动化开发基础 项目实战-监控系统 Day16-14487人已学习 课程介绍 课程特色:实战,细致,生动,深入浅出 适用人群:适合Python初学者 课程详情:从0基础开始 ...
- Python自动化开发基础 分布式监控系统开发实战 day8-李杰-专题视频课程
Python自动化开发基础 分布式监控系统开发实战 day8-10994人已学习 课程介绍 从0基础开始讲解Python语法.流程控制.函数式编程.面向对象开发等重要的Python开发 ...
- python模块、字符编码、文件读写
模块 当我们用一种语言开始真正的软件开发室,除了编写代码外,还需要很多基本的已经写好的现成的东西,高级语言通常都会为我们提供了一个比较完善的基础代码库,让我们能直接调用,python也不例外,为我们提 ...
最新文章
- MYSQL二级表的管理_MySQL分区表的管理~2
- 微信开发系列之五 - 将SAP UI5应用嵌入到微信中
- python xposed_Xposed及类Xposed框架收集
- “苹果税”猛于虎惹众怒,库克:我们是不会让步的
- quartz定时器依赖_Spring Quartz定时器 配置文件详解
- 【Java】第6章 访问权限控制
- 生成指定范围的随机数_JAVA 获取随机数的方式以及应用案例
- c语言程序设计必备单词32个,c语言编程必背单词-20210324071350.docx-原创力文档
- filter和sessionListener实现session超时退出功能,过滤掉轮询请求
- bug - Nacos - Ignore the empty nacos configuration and get it based on dataId
- 计算机网络显示红X无法连接,电脑无线网络连接不上,出现了红x❌
- 深大与南科大计算机,深圳大学和南方科技大学你选哪所?哪所实力更强?
- 第4章 手机平板要兼顾,探究碎片
- 2022数学建模国赛A题赛后总结
- 139邮箱服务器的ip,[原创]中国移动139邮箱和说客
- PX90---Lags Backs
- 使用fsck修复文件系统
- 计算机技术在生物教学中应用,信息技术在生物课堂教学中的应用
- 搭建PXE自动安装centos
- python基础-07-元组/字典的常用基本操作
热门文章
- python最新版本-最新版Python 3.8.6 版本发布
- 学python语言用什么软件-Python是什么?学习Python用什么编译器?
- python爬虫软件-Python爬虫工具篇 - 必会用的6款Chrome插件
- python代码壁纸-70行python代码实现壁纸批量下载
- python可以做什么系统-python什么系统
- python 编程一日一练-Python每日一练0022
- python画图哆啦a梦-使用Python的Turtle绘制哆啦A梦实例
- 学python需要英语基础吗-学python需要英语基础吗
- python和c哪个好学-c语言和python哪个容易
- 对python来说、一个模块就是一个文件-python导入自定义模块和包