设为首页 收藏本站
查看: 711|回复: 0

[经验分享] 自动化运维Python系列(二)之基础数据类型

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-11-30 08:41:59 | 显示全部楼层 |阅读模式
一、列表和元组
列表是我们最常用到的数据类型之一,在一个变量中定义多个变量,可以理解为数组
定义列表
1
2
3
4
5
6
>>> name = ["liunx01","linux02","Unix",22]
>>> print(name)
['liunx01', 'linux02', 'Unix', 22]
>>> name[0]
'liunx01'
>>> name[-1]




步长
1
2
3
4
>>> name
['liunx01', 'linux02', 'Unix', 29, 22]
>>> name[0::2]
['liunx01', 'Unix', 22]




切片,取多个元素
1
2
3
4
5
6
7
8
9
10
11
12
>>> name[0:1]
['liunx01']
>>> name[0:2]
['liunx01', 'linux02']
>>> name[-3:-1]
['linux02', 'Unix']
>>> name[-3:]
['linux02', 'Unix', 22]
>>> name[:3]
['liunx01', 'linux02', 'Unix']
>>> name[:3][:2]
['liunx01', 'linux02']




追加
1
2
3
>>> name.append("CentOS")
>>> name
['liunx01', 'Unix', 22,'CentOS']




插入
1
2
3
>>> name.insert(2,'RetHat')
>>> name
['liunx01', 'Unix','RetHat',22,'CentOS']




修改
1
2
3
>>> name[1] = "CentOS"
>>> name
['liunx01', 'CentOS', 'RetHat', 22,'CentOS']




删除
1
2
3
4
5
6
7
>>> name
['liunx01', 'CentOS', 'RetHat', 'Unix', 22]
>>> name.remove("RetHat") #指定元素删除
>>> del name[0:2] #切片删除
>>> name.pop() #删除最后一个value
>>> name
['Unix']




扩展
1
2
3
4
5
6
>>> name
['liunx01', 'CentOS', 'RetHat', 'Unix', 22]
>>> b = [1,2,3]
>>> name.extend(b)
>>> name
['liunx01', 'CentOS', 'RetHat', 'Unix', 22, 1, 2, 3]




统计
1
2
3
>>> num = name.count(22)
>>> print(num)
1




倒序、排序
1
2
3
4
5
6
7
8
>>> name = [22,"linux01","linux02","Unix",22]
>>> name.reverse()
>>> print(name)
[22, 'Unix', 'linux02', 'linux01', 22]
>>> name = [22,"linux01","linux02","Unix",22]
>>> name.sort()  #注意3.0里面字符串和数字不能直接排序,用2.0
>>> print(name)
[22, 22, 'Unix', 'linux01', 'linux02']




找索引位置
1
2
3
4
5
name = [22,"linux01","linux02","Unix",22]
for i in range(name.count(22)):
     ele_index = name.index(22)
     name[ele_index] = 999
print(name)




判断列表中是否存在一个元素
1
2
3
4
5
6
>>> name
['liunx01', 'linux02', 'Unix', 29, 22]
>>> print(2 in name)
False
>>> print(22 in name)
True




拷贝
1
2
3
4
5
>>> name
['liunx01', 'CentOS', 'RetHat', 'Unix', 22]
>>> name_copy = name.copy()
>>> name_copy
['liunx01', 'CentOS', 'RetHat', 'Unix', 22]



列表的拷贝可不止上面那么简单:
共享列表第二层内存地址
1
2
3
4
5
6
7
import copy name = [22,"linux01","linux02",[88,87,86],"Unix",22] name3 = name.copy() #拷贝列表 name4 = copy.copy(name) #浅copy(软链接) name5 = copy.deepcopy(name) #深copy(完全拷贝)  name[0] = 100 name[3][2] = 100  print(name) print(name3) print(name4) print(name5)
  
#输出
[100, 'linux01', 'linux02', [88, 87, 100], 'Unix', 22]
[22, 'linux01', 'linux02', [88, 87, 100], 'Unix', 22]
[22, 'linux01', 'linux02', [88, 87, 100], 'Unix', 22]
[22, 'linux01', 'linux02', [88, 87, 86], 'Unix', 22]




元组
元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表
1
names = ("alex","jack","eric")



它只有2个方法,一个是count,一个是index

字符串操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
n_arg = {'name':'lichengbing','age':25}n = 'My name is {name} and age is {age}'
print(n.format_map(n_arg))
My name is lichengbing and age is 25
   
n1 = 'Hello World'
print(n1.ljust(40,"-"))
Hello World-----------------------------
   
n1 = 'Hello World'
print(n1.rjust(40,"-"))
-----------------------------Hello World
   
s = "Hello World!"p = str.maketrans("abcdefg","3!@#$%^")
print(s.translate(p))
H$llo Worl#!
   
b="ddefdsdff_哈哈"
print(b.isidentifier()) #检测一段字符串可否被当作标志符,即是否符合变量命名规则
True




字典
由于列表中嵌套列表的做法不便于我们取值,所以就有了字典
字典的特性:key-value、dict是无序的、key值必须唯一
字典的定义
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
id_db = {
   100: {
       'name':"linux",
       'age':24,
       'addr':"shanghai"
   },
   101: {
       'name':"nuix",
       'age':23,
       'addr':"anhui",
   },
}
输出
{100: {'age': 24, 'name': 'linux', 'addr': 'shanghai'},
101: {'age': 23, 'name': 'nuix', 'addr': 'anhui'}}




增加(或者覆盖)
1
2
3
4
5
6
7
8
9
10
dict2 = {
   'name': "Redhat",
    103: {
    'name':"Ubuntu",
   },
}
id_db.update(dict2)
print(id_db)
{'name': 'Redhat', 100: {'age': 24, 'name': 'linux', 'addr': 'shanghai'},
101: {'age': 23, 'name': 'nuix', 'addr': 'anhui'}, 103: {'name': 'Ubuntu'}}




删除
1
2
del id_db[101] #删除整个value里面的数据
id_db[101].pop("addr") #删除单个数据




获取get
1
2
v = id_db.get(102)
print(v)




获取值或者key
1
2
3
4
print(id_db.values()) print(id_db.keys())
dict_values([{'name': 'linux', 'addr': 'shanghai', 'age': 24},
{'name': 'nuix', 'addr': 'anhui', 'age': 23}])
dict_keys([100, 101])




字典转列表
1
2
3
print(id_db.items())
dict_items([(100, {'name': 'linux', 'addr': 'shanghai', 'age': 24}),
(101, {'name': 'nuix', 'addr': 'anhui', 'age': 23})])




判断包含
1
2
3
4
5
id_db.has_key(185185) #only in 2.x
if 185185 in id_db:
     print("yes")
else:
     print("no")




setdefault
1
2
3
4
5
print(id_db.setdefault(185,"9999")) #取一个值,如果值不存在则新添加一个默认值
print(id_db)
9999
{185: '9999', 100: {'addr': 'shanghai', 'age': 24, 'name': 'linux'},
101: {'addr': 'anhui', 'age': 23, 'name': 'nuix'}}




fromkeys
1
2
3
4
5
print(id_db.fromkeys([1,2,3,56],'dddd')) #设置一个新字典,前面是key后面填充value
print(id_db)
{56: 'dddd', 1: 'dddd', 2: 'dddd', 3: 'dddd'}
{100: {'name': 'linux', 'addr': 'shanghai', 'age': 24},
101: {'name': 'nuix', 'addr': 'anhui', 'age': 23}}




popitem
1
2
print(id_db.popitem()) #随机删除一个key,不要用这个随机删除
(100, {'name': 'linux', 'age': 24, 'addr': 'shanghai'})




循环
1
2
3
4
5
6
7
'''
for k,v in id_db.items():   #循环效率低,因为有一个dict转list的过程
     print(k,v)
'''
  
for key in id_db:         #效率高
     print(key,id_db[key])




set集合
set集合是一个无序且不重复的元素集合
1)创建集合
1
2
3
4
5
6
7
se1 = {11,22}
print(type(se1))
se2 = set([22,33])
print(se2)
输出
<class 'set'>
{33, 22}




2)操作集合
集合操作方法和前面的字符串、字典等类似

增加
1
#se1.add(44)





A存在B不存在
1
#se3 = se1.difference(se2)





A有B无 B有A无
1
#se4 = se1.symmetric_difference(se2)



  
更新se1
1
# se1.difference_update(se2)



  
移除(不存在不报错)
1
#se1.discard(11)




remove(不存在报错)
1
#se1.remove(11)




随机移除(返回移除的元素,这里pop里面不能加参数,而list里面pop可以有参数)
1
#ret = se1.pop()



  
交集
1
#se5 = se1.intersection(se2)



   
合并并集
1
#se6 = se1.union(se2)



   
update(接受一个可以被迭代的对象)
1
2
3
4
5
# lii = [11,2,3]
# se8 = se1.update(lii) 不能以这种形式来更新
se1.update(lii)
se7 = se1
print(se7)




小程序练习
题目:资产盘点结果中,找出CMDB项目中哪些要增加、哪些要被删除、哪些要更新。
这里以两个字典示范
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
old_dict = {
    "#1": 8,
    "#2": 4,
    "#4": 2,
}
new_dict = {
    "#1": 4,
    "#2": 4,
    "#3": 2,
}
set_old = set(old_dict)
set_new = set(new_dict)
set_del = set_old.difference(set_new)
set_add = set_new.difference(set_old)
set_update = set_old.intersection(set_new)







运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-307432-1-1.html 上篇帖子: 用python操作mysql数据库(之通过类实现,方便添加功能) 下篇帖子: 动化运维Python系列(三)之基础函数和文件操作
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表