zoukankan      html  css  js  c++  java
  • Python自动化开发

    本节内容

    1. 字符编码

    2. 文件操作

    3. 集合

     

    一、字符编码

     

     

    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 ")    # 写数据到文件

    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)

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    Delphi XE4 FireMonkey 开发 IOS APP 发布到 AppStore 最后一步.
    Native iOS Control Delphi XE4
    Delphi XE4 iAD Framework 支持.
    using IOS API with Delphi XE4
    GoF23种设计模式之行为型模式之命令模式
    Android青翼蝠王之ContentProvider
    Android白眉鹰王之BroadcastReceiver
    Android倚天剑之Notification之亮剑IOS
    Android紫衫龙王之Activity
    GoF23种设计模式之行为型模式之访问者模式
  • 原文地址:https://www.cnblogs.com/jonathan1314/p/6340976.html
Copyright © 2011-2022 走看看