python D2
- 列表、元组操作
- 字符串操作
- 字典操作
- 集合操作
- 文件操作
- 字符编码与转码
1 列表、元组操作
定义列表,访问元素
切片:获取多个元素
追加
修改
删除
In [1]: l = [1,3,5,6] In [2]: l[0] Out[2]: 1 In [3]: l[1] Out[3]: 3 In [4]: l[0:1] Out[4]: [1] In [5]: l[0:-1] Out[5]: [1, 3, 5] In [6]: l.extend([4,5,7]) In [7]: l Out[7]: [1, 3, 5, 6, 4, 5, 7] In [8]: l[0] = 100 In [9]: l[0] Out[9]: 100 In [10]: del l[0] In [11]: del l In [12]: l --------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-12-12f54a96f644> in <module>() ----> 1 l NameError: name 'l' is not defined
扩展
拷贝
统计
排序&翻转
获取下标
In [33]: names = ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3] In [34]: names.sort() In [35]: names Out[35]: [1, 2, 3, 'Alex', 'Amy', 'Rain', 'Tenglan', 'Tom'] In [36]: names.re names.remove names.reverse In [36]: names.reverse() In [37]: names Out[37]: ['Tom', 'Tenglan', 'Rain', 'Amy', 'Alex', 3, 2, 1] In [38]: names.count(1) Out[38]: 1 In [40]: names.index(1) Out[40]: 7 In [41]: names Out[41]: ['Tom', 'Tenglan', 'Rain', 'Amy', 'Alex', 3, 2, 1]
元组
元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表
它只有2个方法,一个是count,一个是index,完毕。
In [1]: a = ('星期一' , '星期二')
In [2]: a.index('星期一')
Out[2]: 0
In [3]: a.count('星期一')
Out[3]: 1
2、字符串操作
特性:不可修改
name.capitalize() 首字母大写
name.casefold() 大写全部变小写
name.center(50,"-") 输出 '---------------------Alex Li----------------------'
name.count('lex') 统计 lex出现次数
name.encode() 将字符串编码成bytes格式
name.endswith("Li") 判断字符串是否以 Li结尾
"Alex Li".expandtabs(10) 输出'Alex Li', 将 转换成多长的空格
name.find('A') 查找A,找到返回其索引, 找不到返回-1
format :
>>> msg = "my name is {}, and age is {}"
>>> msg.format("alex",22)
'my name is alex, and age is 22'
>>> msg = "my name is {1}, and age is {0}"
>>> msg.format("alex",22)
'my name is 22, and age is alex'
>>> msg = "my name is {name}, and age is {age}"
>>> msg.format(age=22,name="ale")
'my name is ale, and age is 22'
format_map
>>> msg.format_map({'name':'alex','age':22})
'my name is alex, and age is 22'
msg.index('a') 返回a所在字符串的索引
'9aA'.isalnum() True
'9'.isdigit() 是否整数
name.isnumeric
name.isprintable
name.isspace
name.istitle
name.isupper
"|".join(['alex','jack','rain'])
'alex|jack|rain'
maketrans
>>> intab = "aeiou" #This is the string having actual characters.
>>> outtab = "12345" #This is the string having corresponding mapping character
>>> trantab = str.maketrans(intab, outtab)
>>>
>>> str = "this is string example....wow!!!"
>>> str.translate(trantab)
'th3s 3s str3ng 2x1mpl2....w4w!!!'
msg.partition('is') 输出 ('my name ', 'is', ' {name}, and age is {age}')
>>> "alex li, chinese name is lijie".replace("li","LI",1)
'alex LI, chinese name is lijie'
msg.swapcase 大小写互换
>>> msg.zfill(40)
'00000my name is {name}, and age is {age}'
>>> n4.ljust(40,"-")
'Hello 2orld-----------------------------'
>>> n4.rjust(40,"-")
'-----------------------------Hello 2orld'
>>> b="ddefdsdff_哈哈"
>>> b.isidentifier() #检测一段字符串可否被当作标志符,即是否符合变量命名规则
True
3、字典操作
字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。
字典的特性:
- dict是无序的
- key必须是唯一的,so 天生去重
添加
修改
删除
查找
In [1]: d={"name":"a","age":12,}
In [2]: d2 = dict(name="a" , age=12)
In [3]: d3 = dict(zip(['name','age'],["a",12]))
In [4]: d
Out[4]: {'age': 12, 'name': 'a'}
In [5]: d2
Out[5]: {'age': 12, 'name': 'a'}
In [6]: d3
Out[6]: {'age': 12, 'name': 'a'}
In [7]: d["sex"] = "男"
In [8]: d
Out[8]: {'age': 12, 'name': 'a', 'sex': 'xe7x94xb7'}
In [9]: d["sex"] = "女"
In [10]: del d["sex"]
In [11]: d
Out[11]: {'age': 12, 'name': 'a'}
In [12]: del d
In [13]: d
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-13-e29311f6f1bf> in <module>()
----> 1 d
NameError: name 'd' is not defined
In [14]: "name" in d2
Out[14]: True
多级字典嵌套及操作
循环dict
In [16]: d2
Out[16]: {'age': 12, 'name': 'a'}
In [17]: for k , v in d2.items():
....: print(k,v)
....:
('age', 12)
('name', 'a')
In [18]:
In [18]: d2.keys()
Out[18]: ['age', 'name']
In [19]: d2.values()
Out[19]: [12, 'a']
In [20]: type(d2.values())
Out[20]: list
4、集合操作
集合是一个无序的,不重复的数据组合,它的主要作用如下:
- 去重,把一个列表变成集合,就自动去重了
- 关系测试,测试两组数据之前的交集、差集、并集等关系
常用操作
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中,但不会同时出现在二者中)
基本操作:
t.add('x') # 添加一项
s.update([10,37,42]) # 在s中添加多项
使用remove()可以删除一项:
t.remove('H')
len(s)
set 的长度
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”的一个浅复制
5、文件操作
对文件操作流程
- 打开文件,得到文件句柄并赋值给一个变量
- 通过句柄对文件进行操作
- 关闭文件
打开文件的模式有:
- r,只读模式(默认)。
- w,只写模式。【不可读;不存在则创建;存在则删除内容;】
- a,追加模式。【可读; 不存在则创建;存在则只追加内容;】
"+" 表示可以同时读写某个文件
- r+,可读写文件。【可读;可写;可追加】
- w+,写读
- a+,同a
"U"表示在读取时,可以将 自动转换成 (与 r 或 r+ 模式同使用)
- rU
- r+U
"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)
- rb
- wb
- ab
with语句
为了避免打开文件后忘记关闭,可以通过管理上下文,即:
In [24]: with open('test.txt' , 'w+') as f:
f.write("aaa")
In [28]: with open('test.txt' , 'r') as f:
print(f.read())
6. 字符编码与转码
详细文章:
http://www.cnblogs.com/yuanchenqi/articles/5956943.html
http://www.diveintopython3.net/strings.html
1.在python2默认编码是ASCII, python3里默认是unicode
2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-16就是现在最常用的unicode版本, 不过在文件里存的还是utf-8,因为utf8省空间
3.在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string

>>> import sys
>>> print(sys.getdefaultencoding())
utf-8
>>> a = "啦啦"
>>> a
'啦啦'
>>> print(a.encode('gb2312'))
b'xc0xb2xc0xb2'
>>> print(a.encode('gb2312').decode('gb2312'))
啦啦