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,不会报错
View Code

文件操作:

 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)
View Code

函数:

 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)
View Code

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("您已退出程序")
View Code

 

posted @ 2021-01-23 21:42  夜半听雨声*  阅读(77)  评论(0)    收藏  举报