python中操作excel、ddt、config、logging方法

1、操作excel

 1 """
 2 1、使用第三方模块openpyxl  
 3 2、安装:pip install openpyxl
 4 3、文件 .xlsx一定要自己新建(不支持.xls类型)
 5 4、流程:打开工作簿(excel)----定位表单(sheet)---定位单元格---读取值
 6 5、如果是数值类型的(int、float),读取之后的类型是数值类型;如果是其他类型的内容,读取之后的类型是str
 7 
 8 """
 9 
10 import openpyxl
11 
12 from openpyxl import load_workbook
13 
14 # 打开Excel:文件放置在当前文件夹中
15 wb = load_workbook("python.xlsx")  # 返回的是工作簿
16 
17 # 定位表单
18 sheet = wb['name']
19 
20 # 定位单元格并取值
21 result = sheet.cell(2, 2).value
22 
23 
24 # 修改值
25 sheet.cell(3, 3).value = "修改"  # 赋值语句
26 
27 # 保存工作薄【一定要保存,否则修改无效,而且保存的话要先关闭excel,否则报错PermissionError: [Errno 13] Permission denied: 'python.xlsx'】
28 wb.save("python.xlsx")
29 
30 # 获取最大行 最大列
31 print(sheet.max_row)
32 print(sheet.max_column)
View Code

2、操作ddt

 1 """
 2 1、使用第三方模块ddt  
 3 2、安装:pip install ddt
 4 3、ddt:结合单元测试来做的
 5 4、帮我们拆分数据,传递参数给测试用例
 6 """
 7 
 8 import unittest
 9 from ddt import ddt, data, unpack
10 
11 test_data = [[1, 2],
12              [3, 4]]
13 
14 
15 @ddt  # @ddt 专门装饰测试类
16 class TestMath(unittest.TestCase):
17 
18     @data(test_data)  # @data 专门装饰测试用例
19     def test_add_1(self, item):  # 使用@data之后,这边要加一个参数来接收
20         print(item)
21         # a = 10
22         # b = 20
23         a = item[0]
24         b = item[1]
25         print("两个数和是", a + b)
26 
27 
28 if __name__ == '__main__':
29     unittest.main(verbosity=2)
View Code

3、操作config

1)首先新建一个配置文件:case.config,内容如下:FLAG是section;mode,case_id_list是option

[FLAG]
mode=on
case_id_list=[2,4]

[PYTHON]
num=87

2)对该配置文件的操作

 1 """
 2 1、配置文件的分类:.ini  .properties  .config   .conf   .xml
 3 2、本次主要讲文本形式的 
 4 3、configparser模块  专门处理配置文件
 5 4、配置文件的数据读取都是字符串类型
 6 """
 7 
 8 import configparser
 9 class ReadConfig:
10     def read_config(self, file_path, section, option):
11         # 实例化
12         cf = configparser.ConfigParser()
13 
14         # 调用read函数打开配置文件
15         cf.read(file_path, encoding="utf-8") 
16 
17         # 获取数据
18         value = cf.get(section, option)
19 
20         # 获取到的所有数据均是字符串,想要还原成本身的数据类型使用eval()函数
21         # print(eval(value))
22 
23         return value
24 
25 if __name__ == '__main__':
26     value = ReadConfig().read_config("case.config", "FLAG", "mode")
27     print(value)
View Code

4、操作logging

 1 """
 2 1、日志:记录系统的操作  记录代码的运行
 3 2、模块logging,不需要安装python自带的
 4 3、log日志分为5个级别:debug info warning error critical(crash)
 5 1)从左往右 级别一次加重
 6 2)收集日志:收集器  会有一个名字,默认顶级收集器:root;默认只收集warning(包含)以上级别的信息
 7 3)输出日志:输出控制台
 8 
 9 
10 """
11 
12 import logging
13 
14 
15 class MyLog:
16     def my_log(self, level, msg):
17 
18         # 定义一个属于自己的日志收集器
19         my_logger = logging.getLogger("python10")
20         my_logger.setLevel("DEBUG")  # 设置输出级别 大写或者数字
21 
22         # 创造一个专属输出渠道  过滤  和排版; 格式如下:
23         formatter = logging.Formatter('%(asctime)s-%(levelname)s-%(filename)s-%(name)s-日志信息:%(message)s')
24 
25         # 输出日志,方法一:输出到控制台
26         ch = logging.StreamHandler()  # 输出到控制台
27         ch.setLevel("DEBUG")  # 设置输出级别 大写或者数字
28         ch.setFormatter(formatter)
29 
30         # 输出日志,方法二:输出到指定文件
31         fh = logging.FileHandler('python10.txt', encoding="utf-8")  # 输出到指定文件
32         fh.setLevel("DEBUG")  # 设置输出级别 大写或者数字
33         fh.setFormatter(formatter)
34 
35         # 对接起来  给日志收集器添加一个渠道【最后输出的是收集和输出的级别的交集】
36         my_logger.addHandler(ch)
37         my_logger.addHandler(fh)
38 
39         if level == "DEBUG":
40             my_logger.debug(msg)
41         elif level == "INFO":
42             my_logger.info(msg)
43         elif level == "WARNING":
44             my_logger.warning(msg)
45         elif level == "ERROR":
46             my_logger.error(msg)
47         elif level == "CRITICAL":
48             my_logger.critical(msg)
49         # 渠道要删除,否则日志输出会重复
50         my_logger.removeHandler(ch)
51         my_logger.removeHandler(fh)
52 
53     def debug(self, msg):
54         self.my_log("DEBUG", msg)
55 
56     def info(self, msg):
57         self.my_log("INFO", msg)
58 
59     def warning(self, msg):
60         self.my_log("WARNING", msg)
61 
62     def error(self, msg):
63         self.my_log("ERROR", msg)
64 
65     def critical(self, msg):
66         self.my_log("CRITICAL", msg)
67 
68 
69 if __name__ == '__main__':
70     my_logger = MyLog()
71     my_logger.debug("天呢")
72     my_logger.info("小意思")
73     my_logger.warning("警告咯")
74     my_logger.error("发生错误咯")
75     my_logger.critical("崩溃哈哈哈")
View Code

logging.basicConfig函数各参数:

filename: 指定日志文件名

filemode: 和file函数意义相同,指定日志文件的打开模式,'w'或'a'

format: 指定输出的格式和内容,format可以输出很多有用信息,如代码中所示:

 %(levelno)s: 打印日志级别的数值

 %(levelname)s: 打印日志级别名称

 %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]

 %(filename)s: 打印当前执行程序名

 %(funcName)s: 打印日志的当前函数

 %(lineno)d: 打印日志的当前行号

 %(asctime)s: 打印日志的时间

 %(thread)d: 打印线程ID

 %(threadName)s: 打印线程名称

 %(process)d: 打印进程ID

 %(message)s: 打印日志信息

datefmt: 指定时间格式,同time.strftime()

level: 设置日志级别,默认为logging.WARNING

stream: 指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略

猜你喜欢

转载自www.cnblogs.com/lctest/p/12158091.html