python3 集合操作、文件操作、函数等内容 (第三周)
前言:
为什么要学习python3?
原因:
1、学习一门语言能力
2、通过该语言能力完成测试自动化以及独立完成自测框架知识
那么我要做什么呢?
1、每天花十个小时完成python3的学习
要在什么地方做呢?
深圳家里完成7天
那到底要怎么做呢?
完成基本的python3的基础知识,从而再学习测试框架
总结:
1、了解集合操作、文件操作、以及函数相应内容
2、完成修改haproxy配置文件代码
3、遗留问题:字符编码与转码内容不能理解,后续再花时间研究
集合操作:
1 知识点:去重 ,关系测试(交集\差集\并集\反向(对称)差集), 无序的 2 函数:set() 3 语法: 4 交集: 5 set1.intersection(list2) 6 并集: 7 set1.union(list2) 8 差集: (set1 和 list2 互换) 9 set1.difference(list2) 10 反向(对称)差集: 11 set1.symmetric_difference(list2) 12 基本操作: 13 set1.add("x") #添加一项 14 set1.update([1,23,44]) #在S中添加多项 15 set1.remove("H") #删除指定H ,没有值会直接报错 16 set1.pop() #随机删除 17 len(set1) #集合的长度 18 set1.discard("777") #不存在返回none,不会报错
文件操作:
1 #文件操作 打开文件——读——保存——关闭文件 2 #字符编码与转码 3 4 #读 5 #data = open("abc.txt",encoding="utf-8").read() 6 #print(data) 7 8 f = open("abc.txt",encoding="utf-8") 9 #date = f.read() 10 #print(date) 11 #print(f.tell()) #打印当前句柄的位置 12 #print(f.read(50)) #打印50个字符 13 #print(f.seek(0)) # 句柄返回最开始位置 14 #print(f.readline()) # 根据当前句柄位置答应最近一行 15 #print(f.encoding) #打印当前文件编码 16 #print(f.errors) # 异常处理用到 17 #print(f.name()) #打印文件名字 18 #print(f.flush()) #刷新,强制保存(默认的保存是都一定的缓存再一起存的) 19 #print(f.close()) #打印文件是否关闭 20 #print(f.truncate()) #截断 按指针后进行截断,默认为空等于0 21 22 23 24 #count = 0 25 #f = open("abc.txt","w",encoding="utf-8") 26 #for line in f: 27 # if count == 9: 28 # print("打印分割线") 29 # count += 1 30 # continue 31 # print(line) 32 # count += 1 33 # #print(line) #没有存内存,效率最高 34 35 36 37 #写 参数:w 是创建一个文件,不可读,a(append) 追加到最后面,不可读 38 #f = open("abc.txt","w",encoding="utf-8") 39 #f = open("abc.txt","a",encoding="utf-8") 40 #f.write("加入一条,\n") #\n 换行 41 #f.write("加入第二条") 42 #data =f.read() # 不可读,会报错 43 #print(data) # 不可读,会报错 44 45 46 #读和写 参数:r+(读写) w+(写读,先创建空文件,再写入,比较少用) 两个都是追加到后面,不能修改 a+(追加读写) 47 #f = open("abc.txt","r+",encoding="utf-8") 48 #f = open("abc.txt","w+",encoding="utf-8") 49 #f = open("abc.txt","a+",encoding="utf-8") 50 #f = open("abc.txt","wb") #二进制文件读写,属于二进制编码的 51 #f.write("写二进制文件里面需要转换\n".encode()) 52 #f.close() 53 54 #修改文件 replace() 55 #f = open("abc.txt","w+",encoding="utf-8") 56 #for line in f: 57 # line = line.replace("新值","旧值",1)
函数:
1 #面向对象:——》 类 ——》 class 2 #面向过程:——》 过程 ——》 def #过程是没有返回值的函数 3 #def func1(): 4 # """注释行""" 5 # print("返回的代码,没有return返回值,默认给None",代表程序结束) 6 #y=func1() 7 #print(y) 8 9 #函数式编程:——》 函数——》 def 10 # def func2(): 11 # """注释行""" 12 # #print("返回的代码,没有return返回值,默认给None") 13 # return 0 #1 #{1:2},(1),[1],123,"中文" 14 # x=func2() 15 # print(x) 16 17 # return 返回不限制类型,内容长度,内容数量, 18 #返回值数 = 0 :返回None 19 #返回值数 = 1 :返回定义的值 20 #返回值数 > 0 :以元组的形式返回 21 #代表程序结束 22 23 #参数组传值 24 #*args:接受N个位置参数,转换才元组形式 25 # def test(*args): #*args 标准规范 26 # print(args) 27 # 28 # test(1,2,3,4,5,6) 29 30 #传字典 31 #**kwargs:接受把N个关键字参数,转换成字典的方式 32 # def test2(**kwargs): #**kwargs 字典标准规范 33 # print(kwargs) 34 # test2(name="nae",age=8,sex="f") 35 # 36 # def test3(name,age=18,**kwargs): 37 # print(name) 38 # print(age) 39 # print(kwargs) 40 # test3(name="nae",sex="f",hobby="tesla",age=3) 41 42 #局部变量(在函数里面的变量),全局变量(在代码的顶端) 函数:global 注:列表、字典、集合、类 局部变量可以改全局变量 43 # age = 33 #全局变量 44 # school = "二中全局变量" #全局变量 45 # def chang_name(name): 46 # #global school #让局部变量改成全局变量 47 # school ="三中局部变量" #局部变量 48 # print("第一次默认值",name,age,school) 49 # name = "YAO" 50 # print("第二次生效了",name,age,school) 51 # 52 # name = "yao" 53 # chang_name(name) 54 # print(name) 55 # print(age) 56 # print(school) 57 58 #递归(特性:1、必要要有结束 2、每进入一层递,问题归规模要减少 3、效率较低 59 # 1、必须有一个明确的结束条件 60 # 2、每次进入更深一层递归时,问题规模相比上次递归都应该有所减少 61 # 3、递归效率不高,递归层次过多会导致栈溢出 62 # (在计算机中,函数调用是通过栈这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出) 63 # 64 # def calc(n): 65 # """ 66 # 递归简单代码 67 # """ 68 # print(n) 69 # if int(n/2) > 0: 70 # return calc(int(n/2)) 71 # print("-->",n) 72 # 73 # calc(10)
haproxy配置文件代码程序:
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 import json 4 import os 5 6 7 8 def values(): 9 """查询结果""" 10 content = input("请输入backend:") 11 with open("haproxy.txt","r",encoding="utf-8") as f: 12 for line in f: 13 if content in line: 14 content_new = "backend %s\n" %content #固定的写法(与文档格式对应上),有一个字符错都显示不出来 15 if content_new == line: #找到对应内容在的所在行 16 return print(f.readline()) #打印最近下一行的内容 17 return print("输入的backend不存在") 18 19 20 21 22 23 def recd_add(): 24 # 用来增加数据,暂时没有加入判断输入数据类型的内容 25 read = input( 26 "请输入要新加的记录:") # 如: {"backend": "www.oldboy.org","record":{"server": "100.1.7.9","weight": 20,"maxconn": 30}} 27 #将read字符串转换成 字典类型 方法1 28 read_dict = json.loads(read) 29 #将read字符串转换成 字典类型 方法2 有点儿low 30 #read_dict = eval("read") 31 with open('haproxy.txt', 'r+', encoding='UTF-8') as f: # 用可以读写的形式打开 32 for line in f: 33 if 'backend' in line: 34 backend_title = "backend {website}\n".format(website=read_dict['backend'])#把字典keybackend的值传给website 35 print("22222",backend_title) 36 if line == backend_title: 37 print("33333333333") 38 return print("您要添加的记录已存在!") 39 print("44444444444444") 40 f.write("\n\n") 41 print("5555555555") 42 f.write(backend_title) 43 f.write("\tserver {} {} weight {} maxconn {}\n" \ 44 .format(read_dict["record"]["server"], read_dict["record"]["server"], \ 45 read_dict["record"]["weight"], read_dict["record"]["maxconn"])) 46 return print('添加记录成功!') 47 48 49 50 51 def recd_delete(): 52 # 用来删除数据 53 read = input( 54 "请输入要删除的记录:") # 如: {"backend": "test.oldboy.org","record":{"server": "100.1.7.9","weight": 20,"maxconn": 30}} 55 # 将read字符串转换成 字典类型 56 read_dict = json.loads(read) 57 flag = 0 58 with open('haproxy.txt', 'r', encoding='UTF-8') as f, \ 59 open('haproxy_bak.txt', 'w', encoding='UTF-8') as f_bak: 60 #backend_title = "backend {}\n".format(read_dict['backend']) 61 for line in f: 62 backend_title = "backend {}\n".format(read_dict['backend']) 63 if line == backend_title: 64 flag = 1 65 f.readline() 66 continue 67 f_bak.write(line) 68 69 if flag == 0: 70 return print("您要删除的记录不存在!") 71 else: 72 with open('haproxy.txt', 'w', encoding='UTF-8') as f, \ 73 open('haproxy_bak.txt', 'r', encoding='UTF-8') as f_bak: 74 for line in f_bak: 75 f.write(line) 76 return print('记录已被删除!') 77 78 79 choice_recd = ['add', 'delete', 'read', 'quit'] # 用来判断输入的内容对不对 80 81 while True: 82 choice = input("Please choose 'add', 'delete', 'read','quit'>>>") 83 if choice in choice_recd: # 判断输入的内容对不对 84 if choice == 'add': 85 recd_add() #增加 86 elif choice == 'read': 87 values() #查看 88 elif choice == 'delete': 89 recd_delete() #删除 90 elif choice == 'quit': 91 exit("您已退出程序")

浙公网安备 33010602011771号