数据类型
一般来说读写数据常常涉及的两种数据类型是文本数据与二进制数据(图片、语音),Python中对于这两大类数据的操作主要使用其内置的两种数据类型——字符串与字节数组: 字节数组: 8 比特整数组成的序列,用于存储二进制数据。 字符串: Unicode 字符组成的序列,用于存储文本数据
字节 & 字节数组
- 字节是不可变的,像字节数据组成的元组;
- 字节数组是可变的,像字节数据组成的列表。 bytes 类型值的表示形式比较特殊:以 b 开头,接着是一个单引号,后面跟着由十六进制数(例如 x02)或 ASCII 码组成的序列,最后以配对的单引号结束。
a = [1, 2, 1, 3]
print(bytes(a))
b=bytearray(a)
print(b)
b.append(3)
print(b)
字符串
Unicode
Unicode编码是一种国际化的编码方式,存储在其中的每一个字符都有自己独特的名字(帮助理解的标准名称)和标识数(Unicode ID)。 在Python中,我们如果知道某个字符的的Unicode ID那么就可以通过字符串的形式来引用该字符,一般有两种写法:
- u后跟四个十六进制的数字来确定所找字符在Unicode前256个平面(多语言基本平面)中所在平面以及所在平面上的具有位置,
- U后跟8个十六进制数字来表示字符在Unicode中的位置。
另外在Python中每一个字符的Unicode ID和标准名称(在Python中所有字母全大写)可以相互转化,主要借助unicodedata中的两个方法:
lookup(name)
返回一个Unicode 字符name()
返回一个Unicode字符的标准化名称,我们也可以通过N{name}的方式引用某个字符
name('$')
lookup('DOLLAR SIGN')
print('N{DOLLAR SIGN}')
print('u0024')
print('U00000024')
字符串函数 len 可以计算字符串中 Unicode 字符的个数,而不是字节数:
代码语言:javascript复制>>> len('$')
1
>>> len('U0001f47b')
1
Python 3 中的字符串是 Unicode 字符串而不是字节数组。这是与 Python 2 相比最大的差别。 在 Python 2 中,我们需要区分普通的以字节为单位的字符串以及 Unicode 字符串。
utf-8
Unicode解决了字符串到字节的编码(encode)问题,但也增大了存储和传输的成本。我们希望重新设计字节到字符串的解码(decode)来降低存储成本,于是UTF-8就诞生了! 为了解决这个问题,我们设计了一种可以变长度的 UTF-8 编码,用一个字节存储英文单词,三个字节存储汉字。这种编码模式对于中英混排的文件有很好的应用效果,但是变长度的编码模式会给代码的运行带来极大困难,因此一种比较好的解决方式是用 Unicode 编码来运行代码,用 UTF-8 进行存储。 python 在读文件后会自动将文件转为 Unicode 编码,unicode 字符串会被自动解码。
代码语言:javascript复制UTF-8 是 Python、 Linux 以及 HTML 的标准文本编码格式。这种编码方式简单快速、字符覆盖面广、出错率低。在代码中全都使用 UTF-8 编码会是一种非常棒的体验,你再也不需要不停地转化各种编码格式。
from unicodedata import name
#unicodedata.lookup()接受标准名称返回unicode编码字符
#unicodedata.name()接收Unicode编码字符,返回大写的标准名称
print(name('A'))
#################不同编码格式的转换###########
snowman = 'u2603'#自动识别为unicode字符串
print(len(snowman))
y=snowman.encode('utf-8')
print(y)
print(len(y))
print(snowman)#解码,但需要注意的是编码方式的差异可能会导致解码异常(解出非预期值或者直接报错)
encode()&decode()
解码一般指将字节序列转化为 Unicode 字符串的过程。 编码是将字符串转化为一系列字节的过程。
%r 和%s 的区别
%r 用rper()
方法处理对象,%s 用str()
方法处理对象
使用%r 打印时时我们能看到它所代表的对象(rper() unambiguously recreate the object it represents)
import datetime
d = datetime.date.today()
print "%s" % d
print "%r" % d
内置处理函数
python 内置的字符串处理方法:
- count
- 查询函数
- in
- str.index(a):返回字符串 a 在 str 中的查询结果(查不到会报错
- str.find(a:查不到返回-1
- str.rfind:返回最后一次出现的查询字符串第一个字母的位置
- replace:
列表
元组
命名元组
python 提供了一种命名元组的方法来对元组的空间进行划分,能够实现类似于类的实例化后的属性的功能。
字典
字典的按键排序(OrderdDict())
缺失键处理(默认键设定)
在对字典的值进行查询时,如果查询的键不存在时会返回一个默认值防止异常值发生:
- get 会返回一个默认值但不会添加不存在的键
- setdefault()会把新的默认值添加进去
- defaultdict():传入参数是一个函数,返回赋给缺失键的值。
可以便捷地对创建字典初始化