1. 集合
1.1 特性
集合是一个无序的,不重复的数据组合,主要作用如下:
- 去重,把一个列表变成集合实现自动去重。
- set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作。
1.2 常用操作:
|
s = set([3,5,9,10]) |
# 创建一个数值集合 |
|
t = set("Hello") |
# 创建一个唯一字符的集合 |
|
a = t | s |
# 求 t 和 s 的并集 |
|
b = t & s |
# 求 t 和 s 的交集 |
|
c = t – s |
# 求差集(项在 t 中,但不在 s 中) |
|
d = t ^ s |
# 求对称差集(项在 t 或 s 中,但不同时出现在二者中) |
1.3 基本操作:
|
t.add('x') |
# 添加一项 |
|
s.update([10,37,42]) |
# 在 s 中添加多项 |
|
t.remove('H') |
# 删除一项 |
|
len(s) |
# s e t 的长度 |
|
x in s |
# 测试 x 是否是 s 的成员 |
|
x not in s |
# 测试 x 是否不是 s 的成员 |
|
s.issubset(t) s <= t |
# 测试是否 s 中的每一个元素都在 t 中 |
|
s.issuperset(t) s >= t |
# 测试是否 t 中的每一个元素都在 s 中 |
|
s.union(t) s | t |
# 返回一个新的 set 包含 s 和 t 中的每一个元素 |
|
s.intersection(t) s & t |
# 返回一个新的 set 包含 s 和 t 中的公共元素 |
|
s.difference(t) s - t |
# 返回一个新的 set 包含 s 中有但是 t 中没有的元素 |
|
s.symmetric_difference(t) s ^ t |
# 返回一个新的 set 包含 s 和 t 中不重复的元素 |
|
s.copy() |
# 返回 set “s”的一个浅复制 |
2. 文件操作
2.1 文件操作流程
示例文件:
root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin gopher:x:13:30:gopher:/var/gopher:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin
2.2 基本操作
|
f = open('file.txt') |
# 打开文件 |
|
first_line = f.readline() |
|
|
print('first line:',first_line) |
# 读一行 |
|
print('我是分隔线'.center(50,'-')) |
|
|
data = f.read() |
# 读取剩下的所有内容,文件大时不要用 |
|
print(data) |
# 打印文件 |
|
f.close() |
# 关闭文件 |
2.3 打开文件的模式
-
r,只读模式(默认)。
-
w,只写模式。【不可读;不存在则创建;存在则删除内容;】
-
a,追加模式。【可读;不存在则创建;存在则只追加内容;】
"+" 表示可以同时读写某个文件
> r+,可读写文件。【可读;可写;可追加】
> w+,写读
> a+,同a
"b" 表示处理二进制文件
> rb
> wb
> ab
2.4 with语句
为了避免打开文件后忘记关闭,可以通过管理上下文,即:
|
1 2 3 |
with open('log','r') as f:
... |
3. 字符编码与转码
3.1 字符编码方式
3.1.1 ASCII编码
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。
3.1.2 Unicode编码
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,所有的字符和符号最少(可能更多)由 16 位来表示(2个字节),即:2 **16 = 65536,这里还有个问题:字节数增加后使用空间会直接翻倍!举例还说:同样是ABCD这些字符存储一篇相同的文章,使用ASCII码如果是1M的话,那么Unicode存储至少2M可能还会更多。
3.1.3 UTF-8编码
是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存... 通过这种可扩展的方式来存储。
在2.x版本的Python中,解释.py文件的时候,默认是给他一个编码的就是ASCII码,如果在2.x版本中不指定编码并且在.py文件中写了一个ASCII码中没有的字符就会显示乱码,不过这个问题在Python3中就不存在了,因为在Python3中默认就是Unicode编码
3.2 Python编码转化
3.2.1 Python3中的编码转换
#在Python3中默认就是unicode编码
#!/usr/bin/env python
#-*- coding:utf-8 -*-
name = '小岳岳'
#转为UTF-8编码
print(name.encode('UTF-8'))
#转为GBK编码
print(name.encode('GBK'))
#转为ASCII编码(报错为什么?因为ASCII码表中没有‘小岳岳’这个字符集~~)
print(name.encode('ASCII'))