声明 :
文档内容学习于
/xiaozhiqi/
模块初始:
Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相应的Python库支持,以后的课程中会深入讲解常用到的各种库,现在,我们先来象征性的学2个简单的。
模块 就像一个个库。
有公共库 和第三方的库
基础格式
import sys(模块名称)
这边需要 模块的名字不要和 文件的名一致 , 因为默认情况下,他的模块会先从本地目录的文件中寻找,而你的自己的文件又不是这个库,所以会报错(python3这里的逻辑有优化,有时不会报错)。 所以这边的话。文件名一定不能和模块名相一致。
模块与文件名不一致。
sys.path
这个模块是打印 python 调用库的 环境变量的。
[root@master day1]# cat sys_mid.py #!/usr/bin/env python3import sysprint (sys.path)[root@master day1]# ./sys_mid.py ['/root/python/day1', '/usr/local/python3/lib/python36.zip', '/usr/local/python3/lib/python3.6', '/usr/local/python3/lib/python3.6/lib-dynload', '/usr/local/python3/lib/python3.6/site-packages'
在windows 上面 然后 一般的标准库,都会在 lib下面
可以看到 里面会有好多的py 文件。 就是标准库
然后 一般第三方库的会在 site-package 下面 。
sys.argv
这个是打印 文件的相对路径的
[root@master day1]# cat sys_mid.py #!/usr/bin/env python3import sysprint (sys.argv)[root@master day1]# ./sys_mid.py ['./sys_mid.py']
os
可以用于和系统交互的模块,比如使用shell指令。
系统交互os.system
[root@master day1]# cat sys_mid.py #!/usr/bin/env python3import osos.system("ls")[root@master day1]# ./sys_mid.py for.pyguess.py interaction.py passwd.py print.py sys_mid.py var2.py var.py
但是system这个模块 只能进行执行(执行结果输出屏幕),不能进行存储结果(变量)。 如下 只能有os的执行输出, 但是当os是变量时候, 其实是没有输出内容的,只有一个执行的结果。
import oscmd_re = os.system("ls")print ("-->",cmd_re) [root@master day1]# ./sys_mid.py for.pyguess.py interaction.py passwd.py print.py sys_mid.py var2.py var.py--> 0[root@master day1]# cat sys_mid.py #!/usr/bin/env python3
os.popen("指令").read()
这个指令分2部分,os.popen("指令"),可以将执行的内容存储到内存地址中。然后read()可以读取。
[root@master day1]# ./sys_mid.py --> for.pyguess.pyinteraction.pypasswd.pyprint.pysys_mid.pyvar2.pyvar.py[root@master day1]# cat sys_mid.py #!/usr/bin/env python3import oscmd_re = os.popen("ls").read()print ("-->",cmd_re)
如上可以看到。还是格式化输出的。
os.mkdir
创建目录
[root@master day1]# cat sys_mid.py #!/usr/bin/env python3import osos.mkdir("new_dir")
当前目录下面,创建了新的目录 。
导入第三方的模块
以上我们都是使用的 系统自带的模块。其实我们也可以使用 第三方的模块
使用自建的模块, 其实就是自己写个脚本。 然后使用 另一个 py文件来调他就行了。
[root@master python]# ./sys_mod.py name:rickypasswd:123ricky wlecome[root@master python]# lsfor.py login.py passwd.py __pycache__ sys_mod.py[root@master python]# cat login.py #!/usr/bin/env python3username = "ricky"passwd = 123name = input( "name:")password = int( input ("passwd:"))if username == name and passwd == password:print ( name,"wlecome")else:print ("incorrent user")[root@master python]# cat sys_mod.py #!/usr/bin/env python3import login #直接调用前面自己编写的模块
但是我们这个使用2个脚本是在同一个目录下面。如果不在同一个目录下面 。执行则会报错
然后如果要调用其他目录的 模块。 之前有说过。python会自动到他的系统路径下面去寻找模块。 然后我们只要把脚本放到 site-package 这个第三方的库的目录中就可以了
我们把文件复制进去。
然后我们看 就算同目录下面 没有 那个login的模块文件 也可以执行了。
数据类型:
核心数据类型:
数字:int, long(python3.5已经没有), float, complex, bool字符:str, unicode列表:list字典:dict元组:tuple集合:set(可变集合),frozenset(不可变集合)文件:file
数字类型:
python的数字字面量:整数,布尔型,浮点数,复数,所有数字类型均为不可变
int(整型)
在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
bool(布尔型)
真或假 1 或 0
float(浮点型)
数字操作:+ , -, *, /, //, **, %, -x, +x
bytes 和 string 转换
参考文档:
/zanjiahaoge666/p/6402907.html
字符串转 2进制bytes
使用encode
mag = ("哈哈哈")print( mag )print( mag.encode()) #在python3中 如果不指定字符集, 默认就是utf-8。 python2不行。print( mag.encode(encoding="utf-8")) #效果同上
执行结果一样
2进制bytes转 字符串
可以使用decode
print( mag )print( mag.encode())print( mag.encode(encoding="utf-8"))print( mag.encode(encoding="utf-8").decode())#可以使用decode转, 一样的,如果不指定字符串,默认是utf-8print( mag.encode(encoding="utf-8").decode(encoding="utf-8")) # 执行结果如上
执行结果一样
算术运算符
以下假设变量: a=10,b=20:
[root@master day1]# ./calculation.sh a+b: 31a-b: 11a*b: 210a/b: 2.1a%b: 1a**b: 16679880978201a//b: 2[root@master day1]# cat calculation.sh #!/usr/bin/env python3a = 21b = 10c = 0c = a + bprint ( "a+b:", c)c = a - b print ( "a-b:", c)c = a * bprint ( "a*b:", c)c = a / bprint ( "a/b:", c)c = a % bprint ( "a%b:", c)a = 21b = 10c = a**bprint ("a**b:",c )a = 10b = 5 c= a//bprint ("a//b:", c )
Python比较运算符
以下假设变量a为10,变量b为20:
Python赋值运算符
[root@master day1]# cat calculation.sh #!/usr/bin/env python3a = 21 b = 10c = 0c = a + bprint ("a+b:",c)c += aprint ("c +=a == c = c + a:",c)c *= aprint ("c *=a == c = c * a:",c)c /= aprint ("c /=a == c = c / a:",c)c %= a print ("c %=a == c = c % a:",c)c **= aprint ("c **= a == c = c ** a:",c)c //= a print ("c //= a == c = c // a:", c)[root@master day1]# ./calculation.sh a+b: 31c +=a == c = c + a: 52c *=a == c = c * a: 1092c /=a == c = c / a: 52.0c %=a == c = c % a: 10.0#这个是取摸。 c=52 a=21 返回除法的余数(整除的余数) 52 整除不了21 52 = 21*2+10 c **= a == c = c ** a: 1e+21 # 10的21次方c //= a == c = c // a: 4.761904761904762e+19
Python逻辑运算符
Python语言支持逻辑运算符,以下假设变量 a 为 10, b为 20:
Python成员运算符
除了以上的一些运算符之外,Python还支持成员运算符,测试实例中包含了一系列的成员,包括字符串,列表或元组。
[root@master day1]# cat calculation.sh #!/usr/bin/env python3a = 10b = 20list = [ 1, 2, 3, 4, 5];print ("a=",a, "b=",b)if ( a in list):print ("a in list")else:print ( "a not in list")if ( b not in list):print ("b not in list")else:print ("b in list")a =2print ("a=",a)if ( a in list):print ("a in list")else:print ("a not in list")[root@master day1]# ./calculation.sh a= 10 b= 20a not in listb not in lista= 2a in list
Python身份运算符
身份运算符用于比较两个对象的存储单元
其实 is 和 “=” 作用类似。 但是有区别
is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。
>>> a = [1, 2, 3]>>> b = a>>> b is a True>>> b == aTrue>>> b = a[:]>>> b is aFalse>>> b == aTrue
更多运算符的运用 查看
/python/python-operators.html
列表
类似于shell中的数组,取下标就可以了。
[root@localhost python]# ./name.py aaabbb[root@localhost python]# cat name.py #!/usr/bin/env python3names = [ "aaa", "bbb" , "ccc"]print (names[0])print (names[1])
取最后一位可以是 -1,倒数第二位就是-2
[root@localhost python]# cat name.py #!/usr/bin/env python3names = [ "aaa", "bbb" , "ccc", "ddd"]print (names[-1])[root@localhost python]# ./name.py ddd
len 打印列表长度,可以
[root@localhost python]# ./name.py 7[root@localhost python]# cat ./name.py #!/usr/bin/env python3names = [ "aaa", "bbb" , "fadfa","ccc", "ddd", "@!dfa","ASfd"]print (len(names))
enumerate
可以直接打印出 列表的下标和内容 。在循环列表取值的时候,可以用到。
[root@localhost python]# cat name.py #!/usr/bin/env python3names = [ "aaa", "bbb" , "fadfa","ccc", "ddd", "@!dfa","ASfd"]for i in enumerate(names):print (i)for i,j in enumerate(names):print (i,j)[root@localhost python]# ./name.py (0, 'aaa')(1, 'bbb')(2, 'fadfa')(3, 'ccc')(4, 'ddd')(5, '@!dfa')(6, 'ASfd')0 aaa1 bbb2 fadfa3 ccc4 ddd5 @!dfa6 ASfd
切片
取出几个连续的串,顾头不顾尾,
[root@localhost python]# ./name.py ['aaa', 'bbb', 'ccc'][root@localhost python]# cat name.py #!/usr/bin/env python3names = [ "aaa", "bbb" , "ccc", "ddd"]print (names[0:3])
反向取
[root@localhost python]# ./name.py ['bbb', 'ccc'][root@localhost python]# cat name.py #!/usr/bin/env python3names = [ "aaa", "bbb" , "ccc", "ddd"]print (names[-3:-1])
如果要取到最后一位,后一位直接不写,就行了。 同理从第一位开始取,首位也可以省略写。
print (names[:3]) [root@localhost python]# ./name.py ['aaa', 'bbb', 'ccc', 'ddd'] ['aaa', 'bbb', 'ccc'][root@localhost python]# cat name.py #!/usr/bin/env python3names = [ "aaa", "bbb" , "ccc", "ddd"]print (names[0:])
根据内容查找下标,使用 .index
[root@localhost python]# ./name.py 0[root@localhost python]# cat name.py #!/usr/bin/env python3names = [ "aaa", "bbb" , "ccc", "ddd"]print (names.index("aaa"))
步长切片,就是不是连续打印
[root@master python]# cat name2.py #!/usr/bin/env python3names = ["aaa","bbb","ccc","ddd"]print (names[0:-1:2]) #这样就是相隔打印一下[root@master python]# ./name2.py ['aaa', 'ccc']
追加
append
[root@localhost python]# ./name.py ['aaa', 'bbb', 'ccc', 'ddd', 'eee'][root@localhost python]# cat name.py #!/usr/bin/env python3names = [ "aaa", "bbb" , "ccc", "ddd"]names.append ("eee") #直接写入内容就行了print (names)
插入到指定位置
insert
[root@localhost python]# ./name.py ['aaa', 'ababab', 'bbb', 'ccc', 'ddd', 'eee'][root@localhost python]# cat name.py #!/usr/bin/env python3names = [ "aaa", "bbb" , "ccc", "ddd"]names.append ("eee")names.insert (1,"ababab")# 写入下标,其实就是插入的位置, 然后是插入的内容print (names)
修改
[root@localhost python]# ./name.py ['aaa', 'bbb', '999999', 'ddd'][root@localhost python]# cat name.py #!/usr/bin/env python3names = [ "aaa", "bbb" , "ccc", "ddd"]names[2] = "999999" #进行修改替换print (names)
多重列表修改
就是有列表套列表的时候进行修改。方法其实和上面一样 就是,多写几个下标就行了。
[root@master python]# ./name.py ['aaa', 'bbb', ['1111', '2222'], 'ddd']['aaa', 'bbb', ['5555', '2222'], 'ddd'][root@master python]# cat name.py #!/usr/bin/env python3names = ["aaa","bbb",["1111", "2222"], "ddd"]print (names)names[2][0] = ("5555")print (names)
删除
1. names.remove
[root@localhost python]# ./name.py ['bbb', 'ccc', 'ddd'][root@localhost python]# cat name.py #!/usr/bin/env python3names = [ "aaa", "bbb" , "ccc", "ddd"]names.remove("aaa")#输入内容print (names)
2.del
[root@localhost python]# ./name.py ['bbb', 'ccc', 'ddd'][root@localhost python]# cat name.py #!/usr/bin/env python3names = [ "aaa", "bbb" , "ccc", "ddd"]del names[0]#输入下标print (names)
也可以删除整个列表。
如上直接报错了。 因为没有 names这个变量了。
3.pop
效果和 del 类似。 就是如果不写下标的话,默认就是删除最后一位。
print (names) names.pop(1)print (names) [root@localhost python]# ./name.py ['aaa', 'bbb', 'ccc']['aaa', 'ccc'][root@localhost python]# cat name.py #!/usr/bin/env python3names = [ "aaa", "bbb" , "ccc", "ddd"]names.pop()
计数
count
[root@localhost python]# ./name.py 1[root@localhost python]# cat name.py #!/usr/bin/env python3names = [ "aaa", "bbb" , "ccc", "ddd"]print (names.count("aaa")) #直接输入内容
清空列表
clear
[root@localhost python]# ./name.py [][root@localhost python]# cat name.py #!/usr/bin/env python3names = [ "aaa", "bbb" , "ccc", "ddd"]names.clear() print (names)
反转
就是整个列表的顺序都反过来了
[root@localhost python]# ./name.py ['ddd', 'ccc', 'bbb', 'aaa'][root@localhost python]# cat name.py #!/usr/bin/env python3names = [ "aaa", "bbb" , "ccc", "ddd"]names.reverse()print (names)
排序
[root@localhost python]# ./name.py ['@!dfa', 'ASfd', 'aaa', 'bbb', 'ccc', 'ddd', 'fadfa'][root@localhost python]# cat name.py #!/usr/bin/env python3names = [ "aaa", "bbb" , "fadfa","ccc", "ddd", "@!dfa","ASfd"]names.sort()print (names)
合并
就是 将2个列表合并到一个列表
[root@localhost python]# ./name.py ['aaa', 'bbb', 'fadfa', 'ccc', 'ddd', '@!dfa', 'ASfd']['aaa', 'bbb', 'fadfa', 'ccc', 'ddd', '@!dfa', 'ASfd', 1, 2, 3, 5] [1, 2, 3, 5][root@localhost python]# cat name.py #!/usr/bin/env python3names = [ "aaa", "bbb" , "fadfa","ccc", "ddd", "@!dfa","ASfd"]names2 = [1,2,3,5]print (names)names.extend(names2) #2个列表进行合并。同时被合并的列表也会保留print (names,names2)
copy 浅复制 也称呼为 浅copy
可以这样复制
[root@localhost python]# ./name.py ['aaa', 'bbb', 'fadfa', 'ccc', 'ddd', '@!dfa', 'ASfd'][root@localhost python]# cat name.py #!/usr/bin/env python3names = [ "aaa", "bbb" , "fadfa","ccc", "ddd", "@!dfa","ASfd"]names2 = names[:]print (names2)
也可以直接复制列表
[root@master python]# cat name.py #!/usr/bin/env python3names = [ "aaa", "bbb", "ccc", "ddd"]names2 = names.copy()print (names)print (names2)[root@master python]# ./name.py ['aaa', 'bbb', 'ccc', 'ddd']['aaa', 'bbb', 'ccc', 'ddd']
但是修改了 原来的列表。 复制的那份并没有改。原理就和复制变量一样。 其实他是用的内存指针的方式进行copy的。 如下
[root@master python]# cat name.py #!/usr/bin/env python3names = [ "aaa", "bbb", "ccc", "ddd"]names2 = names.copy()print (names)print (names2)names[1] = ("bababa")print (names)print (names2)[root@master python]# ./name.py ['aaa', 'bbb', 'ccc', 'ddd']['aaa', 'bbb', 'ccc', 'ddd']['aaa', 'bababa', 'ccc', 'ddd']['aaa', 'bbb', 'ccc', 'ddd']
但是这个只是浅copy,当你是复制是多重列表的时候, 你修改了深层的列表的时候,那复制的那个列表。就会进行改变
[root@master python]# ./name.py ['aaa', 'bbb', ['1111', '2222'], 'ddd']['aaa', 'babab', ['5555', '2222'], 'ddd']['aaa', 'bbb', ['5555', '2222'], 'ddd'][root@master python]# cat name.py #!/usr/bin/env python3names = ["aaa","bbb",["1111", "2222"], "ddd"]name2 = names.copy()print (names)names[1] = ("babab")names[2][0] = ("5555")print (names)print (name2)
浅copy的用处
可以创建联合账号,就像是夫妻拥有共同的账户,然后当一方消费之后,2个人账户余额都会发生变化。
[root@localhost python]# cat name2.py #!/usr/bin/env python3person = [ "name",["saving","100"] ]p1 = person.copy()p2 = person.copy()p1[0] = "husband"p2[0] = "wife"p1[1][1] = 50print (p1)print (p2)[root@localhost python]# ./name2.py ['husband', ['saving', 50]]['wife', ['saving', 50]]
深copy
完全复制,就是当原来的列表,无论怎么改的情况下。复制的那份列表也不会改变。
需要使用import copy 模块
[root@master python]# ./name.py ['aaa', 'bbb', ['1111', '2222'], 'ddd']['aaa', 'babab', ['5555', '2222'], 'ddd']['aaa', 'bbb', ['1111', '2222'], 'ddd'][root@master python]# cat name.py #!/usr/bin/env python3import copynames = ["aaa","bbb",["1111", "2222"], "ddd"]name2 = copy.deepcopy(names)#注意这边一定是使用deepcopy。 否则还是浅copyprint (names)names[1] = ("babab")names[2][0] = ("5555")print (names)print (name2)
如上,可以看到,无论原始的列表 改了第一层还是更深的层次。 copy的names2 都不会变化 。
列表循坏
和shell类似
[root@master python]# cat name2.py #!/usr/bin/env python3names = ["aaa","bbb",["1111", "2222"], "ddd"]for i in names:print (i)[root@master python]# ./name2.py aaabbb['1111', '2222']ddd
元组
作用类似于列表,但是只能只读。不能修改。所以也叫只读列表
基础语法,和列表类似
[root@localhost python]# cat tuple.py #!/usr/bin/env python3names = ( "aaa" , "bbbb")print ( names[1] )[root@loca
而且它只有 count和index参数可以使用
[root@localhost python]# ./tuple.py 10[root@localhost python]# cat tuple.py #!/usr/bin/env python3names = ( "aaa" , "bbbb")print ( names.count("aaa") )print ( names.index("aaa") )
字符串的常用操作
capitalize 首字母大写
[root@master day2]# cat strings.pt #!/usr/bin/env python3name = ("haha")print (name.capitalize())[root@master day2]# ./strings.pt Haha
count 统计 字符串中 某一个字符的数字。
[root@master day2]# cat strings.py #!/usr/bin/env python3name = ("haha")print (name.count("a"))[root@master day2]# ./strings.py 2
center 居中打印。同时 可以规定字符串的长度
[root@master day2]# cat strings.py #!/usr/bin/env python3name = ("haha")print (name.center(50,"-"))# 这边的意思是打印50个字符串, 如果变量中的字符串不够,则用"-"代替。[root@master day2]# ./strings.py -----------------------haha-----------------------
endswith 判断一段字符串以什么结尾
[root@master day2]# cat strings.py #!/usr/bin/env python3name = ("haha")print (name.endswith("a"))print (name.endswith("b"))[root@master day2]# ./strings.py TrueFalse
expandtabs 定义一些格式字符的长度(如tab健)
[root@master day2]# cat strings.py #!/usr/bin/env python3name = ("ha \tha")print (name.expandtabs(tabsize=30))# 这里是定义了tab 健的长度[root@master day2]# ./strings.py ha ha
find 找到这个字符的下标,这个找到的从左边数,第一个找的的字符的下标
[root@master day2]# cat strings.py #!/usr/bin/env python3name = ("abcde")print (name.find("a"))[root@master day2]# ./strings.py 0
rfind 这个找到的从右边数,第一个找的字符的下标(字符对应的下标不变)
[root@master day2]# cat strings.py #!/usr/bin/env python3name = ("abcdea")print (name.find("a"))print (name.rfind("a"))[root@master day2]# ./strings.py 05 #字符对应的下标不变, 只是找寻的方式变了
isalnum 判断字符串里面是否只有数字和字母
[root@master day2]# cat strings.py #!/usr/bin/env python3name = ("abcde")name1 = ("abc123")name2 = ("dadaf123!@")print (name.isalnum())print (name1.isalnum())print (name2.isalnum())[root@master day2]# ./strings.py TrueTrueFalse
isalpha 是都是纯英文(包括大小写)
[root@master day2]# cat strings.py #!/usr/bin/env python3name = ("abcde")name1 = ("abc123")print (name.isalpha())print (name1.isalpha())[root@master day2]# ./strings.py TrueFalse
isidentifier 判断是否是一个合法的变量名
[root@master day2]# cat strings.py #!/usr/bin/env python3name = ("abcde")name1 = ("abc123")name2 = ("dadaf123!@")print ("dada".isidentifier())print ("1dada".isidentifier())# 之前有说过。数字是不行作为变量名开头的[root@master day2]# ./strings.py TrueFalse
print (name.islower()) 判断是不是小写
print (name.upper())判断是不是大写
print (name.isspace()) 判断是不是空格
istitle 判断是不是首字母大写
[root@master day2]# cat strings.py #!/usr/bin/env python3name = ("My name is")name1 = ("My Name Is")print (name.istitle())print (name1.istitle())[root@master day2]# ./strings.py FalseTrue
join 将列表变成字符串。同时定义分隔符
[root@master day2]# cat strings.py #!/usr/bin/env python3print (''.join(['1','2','3']))print ('+'.join(['1','2','3']))# 可以定义分隔符,可以不写。[root@master day2]# ./strings.py 1231+2+3
ljust,rjust 都是定义字符串的长度,然后可以定义不够部分补齐的字符。
[root@master day2]# cat strings.py #!/usr/bin/env python3name = ("My name is")print (name.ljust(50,"*"))print (name.rjust(50,"-"))[root@master day2]# ./strings.py My name is****************************************----------------------------------------My name is
lower 将字符串变小写
upper 将字符串变大写
[root@master day2]# cat strings.py #!/usr/bin/env python3name = ("My name is")print (name.lower())print (name.upper())[root@master day2]# ./strings.py my name isMY NAME IS
strip 可以去掉字符串2边的空格和回车
lstrip 可以去掉字符串左边的空格和回车
lstrip 可以去掉字符右边的空格和回车
[root@master day2]# cat strings2.py #!/usr/bin/env python3name = ("My name is")print (name)print ("\nname".lstrip()) #去掉左边的空格和回车print ("name\n".rstrip()) #去掉右边的空格和回车print ("\n name ".strip()) #去掉两边空格和回车print ("--") [root@master day2]# ./strings2.py My name isnamenamename--[root@master day2]# cat strings.py #!/usr/bin/env python3name = ("My name is")print (name)print ("\nname")print ("name\n")print ("\n name ")print ("--")[root@master day2]# ./strings.py My name isnamenamename --
maketrans 自定义字符串转换。 类似于字符串的加密。
看以下。打印的出来的是转义后的东西。
[root@master day2]# cat strings.py #!/usr/bin/env python3p = str.maketrans("abcdefghijklmn","1234567#@89&*)")# 这边前面的字符数量和后面转移码的数量必须一致。否则会报错print ("my name is haha".translate(p))[root@master day2]# ./strings.py *y )1*5 @s #1#1
replace 字符替换
[root@master day2]# cat strings.py #!/usr/bin/env python3name = ("my name is")print (name.replace("m","M"))[root@master day2]# ./strings.py My naMe is
默认是全部替换,也可以定义替换的数量
[root@master day2]# cat strings.py #!/usr/bin/env python3name = ("my name is")print (name.replace("m","M",1))[root@master day2]# ./strings.py My name is
split 将字符串变成列表,并指定分隔符(默认是空格是分隔符)
[root@master day2]# cat strings.py #!/usr/bin/env python3name = ("my name is ")print (name.split())[root@master day2]# ./strings.py ['my', 'name', 'is']
指定分隔符
[root@master day2]# cat strings.py #!/usr/bin/env python3name = ("my name is ")print (name.split("m")) #可以使用m为分隔符,同时m被视为分隔符,不被打印[root@master day2]# ./strings.py ['', 'y na', 'e is ']
swapcase 大小写互换
[root@master day2]# cat strings.py #!/usr/bin/env python3print ("NAme Is".swapcase())[root@master day2]# ./strings.py naME iS
print (name.title()) 变成 tile,首字母大写。
字典
字典 是一种key-value的数据类型
查
[root@mfsclient python]# cat dictionary.py #!/usr/bin/env pythoninfo = {"stau001":"wutenglan","stau002":"Julia","stau003":"zuotenyaoxi","stau004":"longzeluola","stau005":"jizemingbu"}print (info)print (info["stau002"])[root@mfsclient python]# ./dictionary.py {'stau002': 'Julia', 'stau003': 'zuotenyaoxi', 'stau001': 'wutenglan', 'stau004': 'longzeluola', 'stau005': 'jizemingbu'}Julia
以上只能用于确定key的情况下,。如果不确定key,需要使用info.get,就是没有这个key。程序也不会报错。
[root@mfsclient python]# cat dictionary.py #!/usr/bin/env pythoninfo = {"stau001":"wutenglan","stau002":"Julia","stau003":"zuotenyaoxi","stau004":"longzeluola","stau005":"jizemingbu"}print (info)print (info.get("st10"))print (info.get("stau001"))[root@mfsclient python]# ./dictionary.py {'stau002': 'Julia', 'stau003': 'zuotenyaoxi', 'stau001': 'wutenglan', 'stau004': 'longzeluola', 'stau005': 'jizemingbu'}Nonewutenglan
判断key是否存在
[root@master day2]# cat dictionary.py #!/usr/bin/env python3info = {"stau001":"wutenglan","stau002":"Julia","stau003":"zuotenyaoxi","stau004":"longzeluola","stau005":"jizemingbu"}print ("stau001" in info )print ("stau006" in info )[root@master day2]# ./dictionary.py TrueFalse
只打印value或者只打印key
[root@master day2]# cat dictionary.py #!/usr/bin/env python3info = {"stau001":"wutenglan","stau002":"Julia","stau003":"zuotenyaoxi","stau004":"longzeluola","stau005":"jizemingbu"}print (info.values())print (info.keys())[root@master day2]# ./dictionary.py dict_values(['wutenglan', 'Julia', 'zuotenyaoxi', 'longzeluola', 'jizemingbu'])dict_keys(['stau001', 'stau002', 'stau003', 'stau004', 'stau005'])
改
就是给他进行赋值
root@mfsclient python]# cat dictionary.py #!/usr/bin/env pythoninfo = {"stau001":"wutenglan","stau002":"Julia","stau003":"zuotenyaoxi","stau004":"longzeluola","stau005":"jizemingbu"}print (info)info["stau001"] = "cangjinkong"print (info)[root@mfsclient python]# ./dictionary.py {'stau002': 'Julia', 'stau003': 'zuotenyaoxi', 'stau001': 'wutenglan', 'stau004': 'longzeluola', 'stau005': 'jizemingbu'}{'stau002': 'Julia', 'stau003': 'zuotenyaoxi', 'stau001': 'cangjinkong', 'stau004': 'longzeluola', 'stau005': 'jizemingbu'}[root@mfsclient python]#
增
其实方法和改的方法一样,就是加一个key, 赋值原有的key就是改。 赋值给没有的key就是加一个值。
[root@mfsclient python]# cat dictionary.py #!/usr/bin/env pythoninfo = {"stau001":"wutenglan","stau002":"Julia","stau003":"zuotenyaoxi","stau004":"longzeluola","stau005":"jizemingbu"}print (info)info["stau006"] = "Maria"print (info)[root@mfsclient python]# ./dictionary.py {'stau002': 'Julia', 'stau003': 'zuotenyaoxi', 'stau001': 'wutenglan', 'stau004': 'longzeluola', 'stau005': 'jizemingbu'}{'stau002': 'Julia', 'stau003': 'zuotenyaoxi', 'stau001': 'wutenglan', 'stau006': 'Maria', 'stau004': 'longzeluola', 'stau005': 'jizemingbu'}
删除
可以使用del
[root@mfsclient python]# cat dictionary.py #!/usr/bin/env pythoninfo = {"stau001":"wutenglan","stau002":"Julia","stau003":"zuotenyaoxi","stau004":"longzeluola","stau005":"jizemingbu"}print (info)del info["stau001"]print (info)[root@mfsclient python]# ./dictionary.py {'stau002': 'Julia', 'stau003': 'zuotenyaoxi', 'stau001': 'wutenglan', 'stau004': 'longzeluola', 'stau005': 'jizemingbu'}{'stau002': 'Julia', 'stau003': 'zuotenyaoxi', 'stau004': 'longzeluola', 'stau005': 'jizemingbu'}
如果要只能key的话。可以只用pop
[root@mfsclient python]# cat dictionary.py #!/usr/bin/env pythoninfo = {"stau001":"wutenglan","stau002":"Julia","stau003":"zuotenyaoxi","stau004":"longzeluola","stau005":"jizemingbu"}print (info)info.pop("stau001")print (info)[root@mfsclient python]# ./dictionary.py {'stau002': 'Julia', 'stau003': 'zuotenyaoxi', 'stau001': 'wutenglan', 'stau004': 'longzeluola', 'stau005': 'jizemingbu'}{'stau002': 'Julia', 'stau003': 'zuotenyaoxi', 'stau004': 'longzeluola', 'stau005': 'jizemingbu'}
popitem随机删除一组,可以不指定key
[root@mfsclient python]# cat dictionary.py #!/usr/bin/env pythoninfo = {"stau001":"wutenglan","stau002":"Julia","stau003":"zuotenyaoxi","stau004":"longzeluola","stau005":"jizemingbu"}print (info)info.popitem()print (info)[root@mfsclient python]# ./dictionary.py {'stau002': 'Julia', 'stau003': 'zuotenyaoxi', 'stau001': 'wutenglan', 'stau004': 'longzeluola', 'stau005': 'jizemingbu'}{'stau003': 'zuotenyaoxi', 'stau001': 'wutenglan', 'stau004': 'longzeluola', 'stau005': 'jizemingbu'}
多级字典的嵌套和方法
多级字典
av_catalog = {"Europe":{"": ["很多免费的,世界最大的","质量一般"],"": ["很多免费的,也很大","质量比yourporn高点"],"": ["多是自拍,高质量图片很多","资源不多,更新慢"],"x-":["质量很高,真的很高","全部收费,屌比请绕过"]},"Asis":{"tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]},"mainland":{"1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]}}print (av_catalog)
多级的 改
[root@master day2]# cat Dic.py #!/usr/bin/env python3av_catalog = {"Europe":{"": ["很多免费的,世界最大的","质量一般"],"": ["很多免费的,也很大","质量比yourporn高点"],"": ["多是自拍,高质量图片很多","资源不多,更新慢"],"x-":["质量很高,真的很高","全部收费,屌比请绕过"]},"Asis":{"tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]},"mainland":{"1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]}}print (av_catalog)av_catalog ["mainland"]["1024"][1] = ("aaaaa")print (av_catalog)
执行结果
其他操作
setdefault
可以进行增加元素。同时可以判断key是否存在,如果存在。则该元素不增加。如果存在,增加该元素。
av_catalog = {"Europe":{"": ["很多免费的,世界最大的","质量一般"],"": ["很多免费的,也很大","质量比yourporn高点"],"": ["多是自拍,高质量图片很多","资源不多,更新慢"],"x-":["质量很高,真的很高","全部收费,屌比请绕过"]},"Asis":{"tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]},"mainland":{"1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]}}av_catalog.setdefault("HongKong",{"":["papapa","momo"]})print (av_catalog)
注意看这个的setdefault 的写法,于上面不通。中间是, 不是:
如果key不存在,则进行添加,如果key存在,则不生效。
update
可以将2个字典合并。如实有相同的key,则用新的字典中的key进行替换。
[root@master day2]# cat dictionary.py #!/usr/bin/env python3info = {"stau001":"wutenglan","stau002":"Julia","stau003":"zuotenyaoxi","stau004":"longzeluola","stau005":"jizemingbu"}info2 = {"stau001":"aaaa",1:3,2:4}info.update(info2)print (info)[root@master day2]# ./dictionary.py {'stau001': 'aaaa', 'stau002': 'Julia', 'stau003': 'zuotenyaoxi', 'stau004': 'longzeluola', 'stau005': 'jizemingbu', 1: 3, 2: 4}
item
将字典转换整列表。而列表里面 key和value的形式以元组进行排列的 。
[root@master day2]# cat dictionary.py #!/usr/bin/env python3info = {"stau001":"wutenglan","stau002":"Julia","stau003":"zuotenyaoxi","stau004":"longzeluola","stau005":"jizemingbu"}print (info.items())[root@master day2]# ./dictionary.py dict_items([('stau001', 'wutenglan'), ('stau002', 'Julia'), ('stau003', 'zuotenyaoxi'), ('stau004', 'longzeluola'), ('stau005', 'jizemingbu')])
fromkeys
给一个变量赋值字典,并且初始化这个字段。同时这个字典所有的值都是相同的
[root@master day2]# cat dictionary.py #!/usr/bin/env python3C = dict.fromkeys([6,7,8],("hahah"))# 其实这里的dict就是字典的意思,新创建的字典就是C这个变量print (C)[root@master day2]# ./dictionary.py {6: 'hahah', 7: 'hahah', 8: 'hahah'}
字典的循环
就是个for循环。只不过他默认是指打印key的。所以需要这么写
[root@master day2]# cat dictionary.py #!/usr/bin/env python3info = {"stau001":"wutenglan","stau002":"Julia","stau003":"zuotenyaoxi","stau004":"longzeluola","stau005":"jizemingbu"}for i in info:print (i,info[i])[root@master day2]# ./dictionary.py stau001 wutenglanstau002 Juliastau003 zuotenyaoxistau004 longzeluolastau005 jizemingbu
另一种循环
使用info.items,但是这个循环需要有个将字典转换成列表的过程。如果数据量大的情况下。 非常影响性能。所以推荐上面这种。数据量不大的情况下。是一样的。
[root@master day2]# cat dictionary.py #!/usr/bin/env python3info = {"stau001":"wutenglan","stau002":"Julia","stau003":"zuotenyaoxi","stau004":"longzeluola","stau005":"jizemingbu"}for i,j in info.items():print (i,j)[root@master day2]# ./dictionary.py stau001 wutenglanstau002 Juliastau003 zuotenyaoxistau004 longzeluolastau005 jizemingbu