python自动化运维之路~DAY1
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.文件大小单位单位换算
我们一起看一下下面的图:
没错,都是数字,而且这些数字都是二进制的数字,即:0,1
这些数字在咱们的眼睛里面看起来眼花缭乱的,不知道是吗什么东西,那么我们从生产环境中抓例子,想必大家都看过电影,听过音乐,玩过电子游戏,看过图片,也看过电子书之类的东西,这些东西
归根就地终究还是会存在一个文件中,这写文件的熟悉都会有文件的大小EB,PB,TB,GB,MB,KB等等,他们都是描述文件大小的不通单位,他们的进度都是1024;
即:
1 ExaByte = 1024 PetaBytes
1 PetaByte = 1024 TeraBytes
1 TeraByte = 1024 GigaBytes
1 GigaByte = 1024 MegaBytes
1 MegaByte = 1024 KiloBytes
1 KiloByte = 8 Kilobits
1 kilobit = 128 Bytes
1 Byte = 8 bits
那么大家知道这个单位换算是怎么来的吗?通过查阅资料,让我们一起学习下吧:
1946年,美国宾夕法尼亚大学电工系由莫利奇和艾克特领导,为美国陆军军械部阿伯丁弹道研究实验室研制了一台用于炮弹弹道轨迹计算的“电子数值积分和计算机”(ElectronicNumericalIntegratorandCalculator
简称ENIAC)。这台叫做“埃尼阿克”的计算机占地面积170平方米,总重量30吨,使用了18000只电子管,6000个开关,7000只电阻,10000只电容,50万条线,耗电量140千瓦,可进行5000次加法/秒运算。这个庞然大物于1946年2月15日在美国举行了揭幕典礼。这台计算机的问世,标志着电脑时代的开始。
以上是我从百度DOWN的2个表,是ascii表存的所有的字符,大家看最后的以为数字是多少?外国人发明了一个记数字的方法
用8个1就表示了255,也就是咱们所看到的,(这里我就不扯字符编码了,我主要讲一下这个8这个数字是怎么来的)
这个8个位置表示了255种情况,如果把这8个位置都用,巧妙的用0或者1去占相应的位置,就可以表示255中情况,而且每种情况
都表示不用的意思,他们会根据得到的数字去ascii表中找相应的字符。
例如:11111111这连续的8个1就表示
例如:00110000这8个数字就是十进制的48,回去ascii去找”0"这个数字。
Bit意为“位”或“比特”,是计算机运算的基础,属于二进制的范筹;
Byte意为“字节”,是计算机文件大小的基本计算单位;
这两者应用的场合不同。通常用bit来作数据传输的单位,因为物理层,数据链路层的传输对于用户是透明的,而这种通信传输是基于二进制的传输。在应用层通常是用byte来作单位,表示文件的大小,
在用户看来就是可见的数据大小。比如一个字符就是1byte,如果是汉字,则是2byte。
从上面的解释来看,计算机需要连续的8个数字,然后才能在ascii表中找到相应的字符,但是由于计算机文件大小的计算单位是字节啊,一个字节仅仅能存下一个字符,所以就有了1:8的进度换算
二.字符串的使用
三.列表的使用
五.字典的使用
字典是一个很好玩的数据类型哟,字典中可以无限嵌套字典,但是你要明白每一层的字典中的key是千万不能重复的哟,由于字典是无序的,如果你定义了2个完全一样的key值的话,可能有一个key是无法显示的,
因为它会随机取一个key的值,而丢失了另外的一个相同key名称的值(这个是我在Pycharm测试出来的,共享给大家希望大家注意吧。)
下面我写了一个用字典记录平时我们喜欢看的电视节目名单,相信大家看了我上面的笔记,应该也能写出来这个名单的:(其实这就是一个简单的三级菜单)环境要求 python3.5
1 #!/usr/bin/env python 2 #_*_conding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 6 7 TV_program = { 8 '综艺节目':{ 9 '快乐大本营':{ 10 '财务部':{ '主管':'谢娜'}, 11 '技术支持':{ '主管':'何炅'}, 12 '开发组':"吴昕" 13 }, 14 '非诚勿扰':{ 15 '主持人':{'主管':"孟非"}, 16 "心理老师":"乐嘉" 17 }, 18 '超级演说家':{ 19 '主持人':["余声"], 20 '导师':["乐嘉"], 21 '导师1':["林志颖"] 22 } 23 }, 24 "电视剧":{ 25 "女医明妃传":{ 26 '主演':['刘诗诗','霍建华','黄轩'], 27 "类型":['剧情','传记','历史'], 28 "备注":'卧槽,TMD要爱奇艺会员,老子不看了' 29 }, 30 "灵魂摆渡":{ 31 '主演':['于毅','刘智扬',"肖茵"], 32 "类型":'悬疑', 33 "备注":'已经更新好几年了,不要钱!' 34 } 35 }, 36 "动漫":{ 37 "火影忍者":{ 38 "主演":["旋涡鸣人","佐助","小樱"], 39 "出品国家":"日本动漫", 40 "类型":"励志", 41 "备注":"卧槽!每周更新一集,要我看了10年都木有把他看完啊~有木有啊!" 42 }, 43 "喜羊羊与灰太狼":{ 44 "主演":['喜羊羊','美羊羊','懒羊羊'], 45 "出品国家":"中国", 46 "类型":"卧槽!卧槽!我说不出来~啥类型都有呢!", 47 "备注":"适合天真浪漫的小女孩看。越看越降低智商的动漫!" 48 } 49 } 50 51 } 52 print(TV_program) #打印处整个字典的内容 53 print(TV_program.get('综艺节目').get("超级演说家").get("主持人")) #找出我是演说家的主持人 54 print(TV_program.get('电视剧').get("灵魂摆渡").get("类型")) #找出灵魂摆渡的电视剧的所属类型 55 print(TV_program.get("动漫").get("火影忍者").get("主演")[0]) #找出字典中火影忍者的主角。
建议大家不要用中文在字典中,因为很容易出现中文字符英文字符混搭的问题,统一用成英文就方便了。我这样写是问了更加形象的列出了平时我喜欢看电视节目的一小部分。说实话就是更接地气一点的啦~类似的大家在练习的
时候可以写下公司的名称以及所属部门,主管之类的,也是一种对字典的联系,哈哈。
扩展:
有序字典是字典的一个子集,我们需要导入“collections”这个模块的“OrderedDict“这个方法来实现。最大的特点就是让字典变成有序的!我们以下面这段代码为例!
#!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com import collections dict = {} dict = collections.OrderedDict(dict) dict["name"] = "尹正杰" dict["age"] = "25" dict["blog"] = "http://www.cnblogs.com/yinzhengjie/" def print_dict(): for k, v in dict.items(): print(k, v) print_dict()
这样就可以使得输出的结果按照你写入的顺序来记录了啦!
六.循环语句
for循环
跳过本次循环直接进入下一次循环:continue
1 for i in range(1,10): 2 if i<5: 3 continue 4 print("This number is %s" % i)
跳出整个循环:break
1 for i in range(1,10): 2 if i>5: 3 break 4 print("This number is %s" % i)
好了我们可以用for循环写一个简单的乘法表啦:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 for i in range(1,10): 2 for j in range(1,i+1): 3 print(("%sx%s=%s\t")% (i,j,i*j),end="") 4 if j == i: 5 print("\n")
while循环:编写一个猜测年龄的小程序
1 my_age = 25 2 count = 0 3 while count < 3: 4 user_input = int(input("Guess how old I am:")) 5 6 if user_input == my_age: 7 print("Congratulations, you got it !") 8 break 9 elif user_input < my_age: 10 print("Oops,think bigger!") 11 else: 12 print("think smaller!") 13 count += 1 # 每次loop 计数器+1 14 else: 15 print("猜这么多次都不对,你个笨蛋.")
七.登陆脚本程序开发
登陆接口 环境要求 python3.5
输入用户名密码 用户名密码 在文件中取值
认证成功后显示欢迎信息 例如: 欢迎,alex! (用 字符串格式化输出)
输错三次后锁定 py程序关闭后 再次登陆显示 您的用户已经被锁定,alex! (用到了py文件处理知识)
支持多用户 (不能只有一个alex账户)
流程图如下:
脚本类容:
我用发现用列表根本无法完成锁定用户的功能,究其原因,我怀疑是执行代码完毕后,系统会将该脚本的直接内存释放掉而没有修改脚本的内容。其他的还是可以实现的。
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 6 import sys 7 login_info = { 8 'yinzhengjie':'123', 9 'wusanjiang':'666', 10 'manli':'321' 11 } 12 locked = ['manli'] 13 retry = 0 14 surplus = 2 15 while retry < 3: 16 username = input('please enter your username:') 17 passwd = input("Please input a password:") 18 if username in locked: 19 print("The account has been locked, please contact the administrator to lift restrictions!") 20 sys.exit() 21 else: 22 if username not in login_info: 23 print("sorry,the user name you entered does not exist") 24 elif username in login_info and passwd == login_info.get(username): 25 print("Welcome to use this system %s" % username) 26 sys.exit() 27 else: 28 print('The three times of thse user will be locked, you have a %s chance,' % surplus) 29 surplus -= 1 30 retry += 1 31 continue 32 locked.append(username)
这个问题有点小纠结,发现用列表和字典貌在同一个脚本中貌似无法实现锁定功能,于是我又自学了文件处理的方法,推出了2个版本,在执行之前要读取文件readme
windows版本代码如下
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 6 #导入一个sys模块。因为我需要用这个模块的exit方法来终止当前脚本。 7 import sys 8 #导入getpass模块,用这个方法可以实现对密码的不输出的功能。 9 import getpass 10 #定义一个字典,这个字典里面存放着用户的登陆信息。 11 login_info = { 12 'yinzhengjie':'123', 13 'wusanjiang':'666', 14 'manli':'321' 15 } 16 17 retry = 0 18 #定义一个剩余次数提示,这个数字的变化会意味着执行不同的代码。 19 surplus = 2 20 #满足我给的变量的初值,就会执行一下的代码,这个数字是可以更改的哟~ 21 while retry < 3: 22 # 提示用户输入用户名和密码。 23 username = input('please enter your username:') 24 passwd = getpass.getpass("Please input a password:") 25 #passwd = input("Please input a password:") 26 # 用with方法打开一个文件 27 with open("locked.txt", 'r', encoding="utf-8") as lock_check: 28 # 用一个for循环去读取文件中的每一行 29 for lock in lock_check.readlines(): 30 # 去除掉每一行的空格或者换行符 31 lock = lock.split() 32 # 判断输入的用户名称是否在被锁定的名单中,如果在就执行以下的代码。 33 if username in lock: 34 print("The account has been locked, please contact the administrator to lift restrictions!") 35 # 执行完毕上一行的代码就退出当前脚本 36 sys.exit() 37 # 这个的意思是如果发现输入用户名称没有在锁定的文件中,就执行以下的代码。 38 else: 39 # 如果输入的用户名称不再字典中,就执行以下的代码。 40 if username not in login_info: 41 print("sorry,the user name you entered does not exist") 42 sys.exit() 43 #如果用户名称都正确,就执行以下的代码。 44 elif username in login_info and passwd == login_info.get(username): 45 print("Welcome to use this system %s" % username) 46 sys.exit() 47 #如果以上的2个条件都不满足,就执行以下的代码。 48 else: 49 #当第三次输入用户信息还不正确的时候就执行以下的代码。 50 if surplus == 0: 51 print("Your user has been locked, please contact the administrator to unlock!") 52 #文件的另外一种打开方式,如果执行到这里,说明用户已经输入三次了,这里我们可以锁定该用户名称。 53 f = open("locked.txt", "a", encoding="utf-8") 54 f.write("\n") 55 f.write(username) 56 f.close() 57 sys.exit() 58 #前2次输入的时候需要执行的代码。 59 else: 60 print('The three times of thse user will be locked, you have a %s chance,' % surplus) 61 surplus -= 1 62 retry += 1 63 continue
linux代码如下:
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 6 #导入一个sys模块。因为我需要用这个模块的exit方法来终止当前脚本。 7 import sys 8 #导入getpass模块,用这个方法可以实现对密码的不输出的功能。 9 import getpass 10 #定义一个字典,这个字典里面存放着用户的登陆信息。 11 login_info = { 12 'yinzhengjie':'123', 13 'wusanjiang':'666', 14 'manli':'321' 15 } 16 17 retry = 0 18 #定义一个剩余次数提示,这个数字的变化会意味着执行不同的代码。 19 surplus = 2 20 #满足我给的变量的初值,就会执行一下的代码,这个数字是可以更改的哟~ 21 while retry < 3: 22 # 提示用户输入用户名和密码。 23 username = input('\033[35;1mplease enter your username:\033[0m') #输出的时候提示字符为紫色 24 passwd = getpass.getpass("\033[36;1mPlease input a password:\033[0m") #输出的时候提示字符为浅蓝色,且输入字符不显示到屏幕上。 25 #passwd = input("\033[36;1mPlease input a password:\033[0m") 26 # 用with方法打开一个文件 27 with open("locked.txt", 'r', encoding="utf-8") as lock_check: 28 # 用一个for循环去读取文件中的每一行 29 for lock in lock_check.readlines(): 30 # 去除掉每一行的空格或者换行符 31 lock = lock.split() 32 # 判断输入的用户名称是否在被锁定的名单中,如果在就执行以下的代码。 33 if username in lock: 34 print("The account has been locked, please contact the administrator to lift restrictions!") 35 # 执行完毕上一行的代码就退出当前脚本 36 sys.exit() 37 # 这个的意思是如果发现输入用户名称没有在锁定的文件中,就执行以下的代码。 38 else: 39 # 如果输入的用户名称不再字典中,就执行以下的代码。 40 if username not in login_info: 41 print("sorry,the user name you entered does not exist") 42 sys.exit() 43 #如果用户名称都正确,就执行以下的代码。 44 elif username in login_info and passwd == login_info.get(username): 45 print("Welcome to use this system %s" % username) 46 sys.exit() 47 #如果以上的2个条件都不满足,就执行以下的代码。 48 else: 49 #当第三次输入用户信息还不正确的时候就执行以下的代码。 50 if surplus == 0: 51 print("\033[31;1mYour user has been locked, please contact the administrator to unlock!\033[0m")#提示字符颜色变为红色 52 #文件的另外一种打开方式,如果执行到这里,说明用户已经输入三次了,这里我们可以锁定该用户名称。 53 f = open("locked.txt", "a", encoding="utf-8") 54 f.write("\n") 55 f.write(username) 56 f.close() 57 sys.exit() 58 #前2次输入的时候需要执行的代码。 59 else: 60 print('\033[32;1mThe three times of thse user will be locked, you have a %s chance,\033[0m' % surplus)#提示字符用黄色警醒用户! 61 surplus -= 1 62 retry += 1 63 continue
如果,你真的是小白的话,看不懂文件处理也没关系,可以参考一下我另外一篇关于文件处理的博客:http://www.cnblogs.com/yinzhengjie/p/6269791.html