Python自动化运维 - day2 - 数据类型

1、进制

       每8位分为一组,8位成为一个字节

       万国码定义字节是不固定的,最少两个字节

       保存文件的时候要选择编码格式

 

       unicode -  utf-8    每个字符集,都有自己的编码格式(编码对应关系)

       utf-8   3个字节

       gbk     2个字节

       不能以utf-8存储,用gbk去读取,这样就会造成乱码

 

       总结:

                1、硬盘上保存的数据是以二进制保存的

                2、读取二进制,然后转换成对应编码的数据

                3、 f  = open('test.txt','rb')

                4、往往用户看到的是

                        - 转换完成的字符出啊

                        - 以十六进制展示的0101011,因为16进制表示的一个字符的所需位数更少(以\x开头来显示)

 

2、基本数据类型

       不同的数据类型具备不同的功能

       1、字符串

                不可变对象

                所有的方法均会产生新的对象,并应用对应的方法

            

  1     - capitalize()   首字母大写
  2 
  3              例: name = 'hello' name.capitalize() 结果: 'Hello' 
  4 
  5     - casefold()   3.x新增   字符串转换为小写,可以转换各种语言大小写(法语、德语...)
  6 
  7              例:   name = 'HELLO'   name.casefold()      结果: 'hello'
  8 
  9  * - lower()     字符串转换为小写,只能转换英文字母
 10 
 11               例:  name = 'World'    name.lower()   结果: 'world'
 12 
 13     - center(width,filechar=None)    文本填充,width为字符串的总长度,str居中然后两端用fillcharacter填充,fillchar默认为空格
 14               例:    name = 'hello'   name.center(7,'*')   结果: *hello*
 15 
 16     - counter(sub,start=None,end=None)     sub为统计的字符串(子序列),统计sub出现的次数,start为起始位置,end为结尾位置
 17 
 18               例:   name = 'hello'   name.counter('l')   结果: 2
 19 
 20 *  - startswith(suffix,start=None,end=None)    以suffix为开头,返回bool值,start起始位置,end结束位置
 21 
 22               例:   name = 'Hello'   name.startswith('H')   结果:  True
 23 
 24 *  - endswith(suffix,start=None,end=None)     以suffix为结尾,返回bool值,start起始位置,end结束位置
 25 
 26               例:   name = 'world'   name.endswith('d')  结果: True
 27 
 28     - expendtabs(20)    找到tab键,然后对它做一个特殊的替换,20表示,两个\t之前的总和(开头没有的话,默认从开头开始)
 29 
 30               例:   name = 'a\tb\tc\t'  name.expendtabs(3)   结果: 'a  b  c'   解读:中间两个空格,算上单字符串和空格,总长度为3。
 31 
 32 *  - find(sub,start=None,end=None)    找到sub在str中的位置,如果找到返回index(匹配到第一个),找不到返回-1
 33 
 34               例:  name = 'hello'    name.find('l')   结果: 2
 35 
 36 *  - format()    格式化字符串,位置占位符为{0},{1}
 37 
 38               例:   print("Hello {0},I'am {1}".format('daxin','20'))
 39                        可以命名占位符{name},{age},那么赋值的时候就需要    
 40                        name=daxin,age=20
 41 
 42     - format_map()    格式化字符串,只不过传递的值是一个字典接上个例子:{'name':"daxin",'age'=20}
 43 
 44     - index(sub)    查询sub在str中的index,如果不存在,会报错
 45 
 46               例:  name = 'hello world'  name.index('w')  结果: 6
 47 
 48     - isalnum()    判断str中是否包含数字,字母,汉字等等,然后bool
 49 
 50               例:  name = 'abc123你好'  name.isalnum()  结果: True
 51 
 52     - isalpha()    判断字符串是否都为字母,返回bool类型
 53 
 54               例:  name = 'abc123'  name.isalpha()   结果:False
 55 
 56 *  - isdecimal()    只能认识阿拉伯数字,'123'
 57 
 58                例:  name = '123'   name.isdecimal()   结果:True
 59 
 60     - isdigit()    只能认识阿拉伯数字、以及特殊符号的数字,'123',''
 61 
 62                例:   name = '123②二'  name.digit()    结果:False
 63 
 64     - isnumerice()    只能认识阿拉伯数字、以及特殊符号的数字,以及中文数字'123','',''
 65 
 66                例:  name = '123②二'  name.isnumerice()   结果:True
 67 
 68     - isidentifier()    判断对象是否可以成为标识符(变量名)来用,不会判断关键字
 69 
 70                例: name = '9hello'  name.isidentifier()   结果: False
 71 
 72      - islower()    str是否都是小写,返回bool
 73 
 74                例:  name = 'hello'  name.islower()  结果:True
 75 
 76      - isupper()    str是否是大写,返回bol
 77 
 78                例:  name = 'HELLO'   name.isuper()  结果: True
 79 
 80 *   - upper()    把str转换为大写
 81 
 82                例: name = 'hello'   name.upper()   结果: 'HELLO'
 83 
 84      - isprintable()    判断对象是否可以被打印(不包含隐藏字符,例如\n,这种打印不出来的,就会返回False)
 85 
 86                例: name = 'hello\n'  name.isprintable()   结果: False
 87 
 88      - isspace()    判断对象是否是空格
 89 
 90                例:  name = ' '      name.isspace()    结果: True
 91 
 92       - istitle()    判断对象是否是标题,既首字母大写(既每个单词的首字母大写)
 93 
 94                例:  name = 'Hello World'   name.istitle()    结果: True
 95 
 96 *    - join()    连接,用于把可迭代对象的每个元素用 什么  连接起来,可迭代对象的元素必须是str
 97 
 98                例1:    a = 'hello'   '*'.join(a)   结果: h*e*l*l*o
 99 
100                例2:    '*'.join([ str(i) for i in range(10)])
101 
102       - ljust(width,fillchar=None)    左填充,fillchar为填充的字符
103 
104                 例:name = 'hello'    name.ljust(10,'*')  结果:*****hello
105 
106       - rjust(width,fillchar=None)    右填充,fillchar为填充的字符
107 
108                 例:     name = 'hello'    name.rjust(10,'*')  结果:hello*****
109 
110       - lstrip()    左去除,既删除左边的空格换行符和制表符
111 
112                 例:  name = '*hello*'   name.lstrip('*')   结果: 'hello*'
113 
114       - rstrip()    右去除,既删除右边的空格换行符和制表符
115 
116                 例:  name = '*hello*'   name.rstrip('*')   结果: '*hello'
117 
118       - maketrans('abc','123')    创建对应关系,既a对应1,b对应2,c对应3
119 
120                 例:    m = str.maketrans('abc','123')
121 
122                         name = 'abc123'
123 
124                          v = name.translate(m)
125 
126                          print(v)
127 
128                           '123123'
129 
130       - translate()    和maketrans连用,用来表示按照什么规则进行翻译解释,例子如上
131 
132       - partition('split')    根据split进行分割,从左开始,只分割遇到的一个split,并且保存分隔符,返回的对象为元祖
133 
134                  例:  name = 'Hello|World'   name.partition('|')
135 
136                           ('hello','|','World')
137 
138 *    - replice('src','dst',counter=None)     字符串的替换,把src替换为dst,counter为替换几次
139 
140                  例:  name = 'Hello World'    name.replice('H','h')   结果: 'hello World'
141 
142       - rfind('sub')    右查找,既丛字符串的右边开始查找sub,并返回它对应的index
143 
144                  例:  name = 'hello'   name.rfind('l')   结果: 3
145 
146        - rindex('sub')    从右边查找sub的index,如果sub在str对象中不存在,那么会报valueError异常
147 
148                  例:  name = 'hello'  name.rindex('l')  结果: 3
149 
150        - rpatition('split')    既从右边开始,对找到的第一个split进行分割,返回值为元祖(包含分隔符)
151 
152                  例:  name = 'hello'   name.rpatition('l')   结果: ('hel','l','o')
153 
154 *     - split('split',num=None)    把字符串默认从左开始对象使用split进行分割,默认会对所有分割符进行分割,num可以指定分隔符的个数
155 
156                  例1: name = 'hello world'   name.split('l')   结果: ['he','','o wor','d']
157 
158                  例2: name = 'hello world'   name.split('l',1)  结果: ['he','lo world']
159 
160        - rsplit('split',num=None)    把字符串从右开始使用split进行分割,在不指定num的情况下和split相同
161 
162                   例: name = 'hello world'    name.rsplit('l',1)  结果: ['hello wor','d'163 
164        - splitlines(keepends=None)     以什么为分行符,功能等同于split('\n')
165 
166                   例:  name = 'hello\nworld'  name.splitlines('\n')
167 
168 *     - strip('string')    去除两边的string,默认是移除空格换行及制表符。
169 
170                   例:  name = ' hello '   name.strip()     结果:  'hello'
171 
172        - swapcase()    大小写转换,既把对象的大写转换为小写,小写转换为大写
173 
174                   例:  name = 'Hello'    name.swapcase()   结果:   'hELLO'
175 
176        - title()    把单词的首字母换成大写
177 
178                   例:  name = 'hello'    name.title()   结果:  'Hello'
179 
180        - zfill(width)    在字符串的左边填充0,width为总长度
181 
182                   例:  name ='hello'     name.zfill(10)   结果: '00000hello'
183 
184         - encode(encoding = 'UTF-8')    把字符串转换为二进制(字节类型),encodinf=UTF-8,表示转换的时候按照UTF-8进行编码
185 
186                   例:  name = '你好'   name.encode(encoding='UTF-8')   结果: b'\xe4\xbd\xa0\xe5\xa5\xbd'
187 
188                   也可以用其他的编码类型如:gbk    

                练习题:

                        name = ' aleX'

                        1、移除name变量对应的值两边的空格,并输出移除后的内容

                                name.strip()

                        2、判断name变量对应的值是否已"al"开头,并输出结果

                                name.startswith('al')

                        3、判断name变量对应的值是否已'X'结尾,并输出结果

                                name.endswith('X')

                        4、将name变量对应的值中的'l',替换为'p',并输出结果

                                name.replice('l','p')

                        5、将name变量对应的值根据'l',进行分割,并输出结果

                                name.split('l')

                                name.partition('l')

                        6、请问上一题e,分割后得到值的类型是?

                                name.split('l')    list

                                name.partition('l')    tuple

                        7、将name变量都应的值变大写,并输出结果

                                name.upper()

                        8、将name变量对应的值变小写,并输出结果

                                name.lower()

                        9、请输出name变量对应的值的第二个字符

                                name[1]

                        10、请输出name变量对应的值的前三个字符

                                name[:3]

                        11、请输出name变量对应值的后2个字符

                                name[-2:]

                        12、请输出name变量对应的值中'e' 所字啊索引的位置

                                name.find('e')

                                name.index('e')

                        13、获取子序列,仅不包含最后一个字符

                                name[:-1]

      

       2、int类型

                不可变类型

1     - bit_length()   -->  3.x   显示对象占用的位数(当前整数最少用几位来表示)
2 
3               例:   name = 2     name.bit_length()    结果: 2
4 
5      - to_bytes(length,byteorder='big')    获取整数对象的byte表示(一般用16进制显示),length表示用几个字节来显示,byteorder='big/little'"big"表示最有意义的字节放在字节数组的开头,"little"表示最有意义的字节放在字节数组的结尾
6 
7               例1:   name = 15   name.to_bytes(5,byteorder='big')   结果: b'\x00\x00\x00\x00\x0f'
8 
9               例2:   name = 15 name.to_bytes(5,byteorder='little') 结果: b'\x0f\x00\x00\x00\x00'

 

       3、布尔值

                不可变类型

                bool(int),既布尔类型,继承了int类型的属性

                非0,None,'',[] 等默认布尔类型为True,其他对象全为False

 

       4、列表

                可变类型

                支持索引,切片及for循环

                所有的操作,直接作用于list对象,这一点和str不同(str是拷贝)。

               

 1     - append()    列表追加,表示追加一个元素
 2 
 3            例:   name = [1,2]    name.append(3)   结果: [1,2,3]
 4 
 5     - clear()    列表清空
 6 
 7     - copy()     列表复制,浅copy
 8 
 9            例:   name = [1,2]          copy = name.copy()
10 
11     - count('元素')    计算元素在list中的个数
12 
13            例:   name = [1,2,3,1]  name.count(1)    结果: 2
14 
15            注意:如果直接用=(name1=name),那么对name进行修改同样会作用在name1行,因为它俩指向一个内存地址
16 
17     - extend('list/iterable')    把列表或者可迭代对象中的元素,循环的append到list中去
18 
19            例:   name = [1,2]    name.extend([i for i in range(2)])  结果: [1,2,0,1]
20 
21            注意:如果这里跟string,那么它会把string的每个字母当成一个元素进行append
22 
23     - index('元素')    从左向右查找元素,返回元素的index,如果没有,则会报错
24 
25             例:   name = [1,2,3]   name.index('3')   结果: 2
26 
27     - insert('index','元素')    在index的位置上插入元素
28 
29             例:    name = [1,2,3]   name.insert(1,10)   结果:  [1,10,2,3]
30 
31     - pop(index=None)    根据index,弹出(删除)一个元素,这个元素会作为方法的返回值
32 
33             例:    name = [1,2,3]   name.pop(1)    结果:   [1,3]
34 
35             如果没有指定index,那么默认会从list的右边进行弹出
36 
37     - remove('元素')    删除一个元素,并不会做为方法返回值
38 
39             例:    name = [1,2,3]   name.remove('1')  结果: [2,3]
40 
41             注意:这里也可以直接通过关键字del 来删除列表中的某个元素
42 
43     - reverse()    反转一个元素,既倒序
44 
45             例:    name = [1,2,3]   name.reverse()   结果:  [3,2,1]
46 
47     - sort(reverse=False)    元素的排序,直接作用在列表上,默认是正序,当reverse=True时为倒序
48 
49             例:    name = [1,2,3]    name.reverse(reverse=True)   结果: [3,2,1]
50 
51      range(start=0,end,setp=None)     在2.x中会直接生成一个列表,在3.x中会生成一个生成器,当作用于for循环进行迭代的时候,才会依次生成,start默认从0开始,setp为步长,不会包含end的数字
52 
53             例:    range(1,10)   在迭代的时候为  1,2,3,4,5,6,7,8,9
54 
55             注意:2.x 中的 xrange 和  3.x  中的 range 相同
56 
57     enumerate('list',index=0)    为list对象依次添加数字(在循环中额外生成一列有序的数字)
58 
59              例:   for i,ele in enumerate(range(3),1):
60 
61                              print(i,ele)
62 
63              结果:     1  0 
64 
65                        2  1
66 
67                        3  2

 

       练习题:

                li = ['alex','eric','rain']

                1、计算列表长度并输出

                        len(li)

                2、列表中追加元素'seven',并输出添加后的结果

                        li.append('seven')

                        li.insert(3,'seven')

                3、请在列表中的第1个位置插入元素'Tony',并添加输出后的结果

                        li.insert(1,'Tony')

                4、修改列表第2个元素为'Kelly',并添加输出后的结果

                        li[2] = 'Kelly'

                5、请删除列表中的元素'eric' ,并输出修改后的列表

                        li.remove['eric']

                        li.pop(1)

                        del li[1]

                6、请删除列表中的第2个元素,并输出删除的元素的值和删除元素后的列表

                        name = li.pop(2)

                7、请删除列表中的第3个元素,并输出删除元素后的列表

                        del li[2]

                8、请删除列表中的第2至4个元素,并输出删除元素后的列表

                        del li[1:4]

                9、请将列表所有的元素进行反转,

                        li.reverse()

                        li.sort(reverse=True)

                10、请使用for、len、range输出列表的索引

                        for i in range(0,len(li)):

                                print i

                11、请使用enumerate输出列表元素和序号(序号从100开始)

                        for i,k in enumerate(li,100):

                                print i,k

                12、请使用for循环列出列表的所有元素

                        for i in li:

                                print i

 

 

       5、元组

                不可变类型

                可以认为是一个特殊的列表,拥有list的切片,index等功能

       *       创建元组:   user_tuple = ('daxin',)    --> 一个元素需要加逗号(,)

    - count('元素')     统计元素出现的次数

             例:  a = ('h','h','e')    a.count('h')   结果:2

    - index('元素',start=首,end=尾)    获取元素的index位置

             例:  a = ('h','h','e')    a.index(h)   结果:0

             注意: 当list作为元组的一个元素的话,那么这个列表是可以修改的,元组保存的是指向list的指针,只要指向的list没变,那么list的对象就可以随意变化

             当数据进行嵌套的时候,数据是否可以修改,要遵循目标数据类型的规则

             既:当被嵌套的数据类型为list,list本事是可变的,那么就可以修改,当嵌套的数据类型为tuple,tuple本事是不可变的,那么就不能修改

       5、字典

                可变类型,并且是无序的,可以嵌套

                注意:字典的key是不可变类型,元组可以,但是元祖嵌套list就不可以了,因为list不是一个hashable的对象

                bool,int 都可以作为key,需要注意的是bool的 True 隐含的默认值 为 1, False 为 0 ,所以当 True 和 1 都存在的话(Python认为True就是1),会只显示 True 。

                创建字典:   dic = {'name':'daxin'} 

 1     - clear()    清空字典
 2 
 3     - copy()    字典copy,浅拷贝
 4 
 5 *  - get('key',default=None)    获取key对应的value,如果key不存在,那么返回None,default表示默认值,如果key不存在,并且指定了default,那么就会返回default对应的值                      
 6 
 7           例:  dic = {'name':'daxin','age':20}    dic.get['name']    结果:'daxin'
 8 
 9     - items()    把字典的key:value变成一个元组
10 
11           例:  dic = {'name':'daxin','age':20}    dic.items()    结果:   [('age', 20), ('name', 'daxin')]
12 
13     - keys()     获取字典的key值,然后以列表的形式返回
14 
15            例:  dic = {'name':'daxin','age':20}    dic.keys()     结果:   ['age', 'name']
16 
17     - values()    获取字典的value值,然后以列表的形式返回
18 
19             例:  dic = {'name':'daxin','age':20}    dic.values()   结果:   [20, 'daxin']
20 
21     - pop('key')    弹出(删除)key对应的value,那么方法会返回key对应的value的值
22 
23              例:  dic = {'name':'daxin','age':20}    dic.pop('age')     结果:   20  
24 
25     - popitem()     随机弹出一个key:value对,那么方法会随机返回一个key:value元组,我们可以指定两个参数进行接收
26 
27              例:  dic = {'name':'daxin','age':20}    dic.popitem()       结果:   ('name', 'daxin')
28 
29     - setdefaut('key','value')    设置key的默认值为value,当key不存在的时候,创建并返回value,若存在则不修改,返回对应的value
30 
31              例:  dic = {'name':'daxin','age':20}    dic.setdefaut('job','Linux')     结果:  {'name':'daxin','age':20,'job':'Linux'}
32 
33     - update(dic1)    dic1增加到dic中去,如果存在,那么更新,不存在就增加(批量进行增加和修改)
34 
35               例:  dic = {'name': 'daxin', 'age': 20}   dic1 = {'salary': 25000, 'name': 'alex'}    dic.update(dic1)     结果: dic  {'salary': 25000, 'name': 'alex', 'age': 20}
36 
37     del dic['key']    通用方法,删除一个元素
38 
39  
40 
41     fromkeys()静态方法,直接可以通过dict.fromkeys进行调用
42 
43               dict.fromkeys('list',default)    用于生成字典,key从list中循环读取,并且值都设置为default。
44 
45               注意:当default的类型为list,那么修改一个key的value,会作用在所有的value中,因为fromkeys保存的是key对应的list的内存地址(因为内存地址是相同的)
46 
47               例:  li = ['a','b','c']    dict.fromkeys(li,'hello')   结果:  {'c': 'hello', 'a': 'hello', 'b': 'hello'} 

 

 

       6、集合          

                可变类型,集合元素是不可变类型

                集合是一个特殊的列表,它的元素都是唯一的(元素不能重复),不支持索引,支持for循环

                创建:     se  = {'daxin','age','job'}     和字典很像,只不过不是key:value      

    - add('元素')    添加一个元素,如果元素存在,则不变

    - clear()     清空

    - copy()    浅拷贝

    - difference('set1')    找到set中存在,set1不存在的元素 --> 写cmdb会用

    - symmetrice_defference('set1')    对称差集,交集以外的所有元素

    - intersection('set1')    取set和set1之间的交际

    - union('set1')    取set和set1之间的并集

    - defference_update('set1')    找到set中存在,set1不存在的元素,然后赋值给set(清空set,然后再赋值)

    - discard('元素')    移除一个元素

    - isdifjoint()    是否有交集

    - issubset()    是否是子集

    - issuperset()    是否是父集

    - pop()    取值并移除,然后返回对应的值

    - remove()    直接删除,不返回

    - update('set1/list')    把set1/list中set没有的数据添加到set中去
posted @ 2017-05-08 18:38  SpeicalLife  阅读(396)  评论(0编辑  收藏  举报