尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

【文件操作、目录操作】-覆盖:ini文件、yaml/yml文件、excel文件、json文件的python操作封装

【文件操作、目录操作】-覆盖:ini文件、yaml/yml文件、excel文件、json文件的python操作封装 python之文件读写、目录操作、序列化str操作后写入文档、xml模块、configparser模块关于常见文档格式的操作封装一 .ini文件的操作类二 .yaml文件的操作类三 .excel文件的操作类 xlrd1.2.0版本才有好的支持最新的支持不好四、 pandas 读取excel文件五、 json文件的操作类一 .ini文件的操作类# -*- coding:utf-8 -*-# Time: 2021/5/21 11:07# Author: 华# File: operate_ini.py# Software: PyCharmimportdataimportconfigparserclassGetConfig: 封装一个类进行ini文件的常用操作 def__init__(self,filepathos.path.dirname(os.path.dirname(os.path.abspath(__file__)))):self._pathfilepathr/data/globalconfig.iniprint(self._path)self.configconfigparser.ConfigParser()# 实例化解析对象self.config.read(self._path,encodingutf-8)# 读文件defget_sections(self): 获取ini文件所有的块返回为list sectself.config.sections()returnsectdefget_options(self,sec): 获取ini文件指定块的项 :param sec: 传入的块名 :return: 返回指定块的项列表形式 returnself.config.options(sec)defget_items(self,sec): 获取指定section的所有键值对 :param sec: 传入的块名 :return: section的所有键值对元组形式 returnself.config.items(sec)defget_option(self,sec,opt): 获取指定 小项 的值 :param sec: 传入的块名 :param opt: 传入项 :return: 返回项的值(string类型) returnself.config.get(sec,opt)defwrite_(self): 将修改后写入文件 withopen(self._path,w)asfp:self.config.write(fp)defadd_section_(self,sec): 为ini文件添加新的section, 如果section 已经存在则抛出异常 :param sec: 传入的块名 :return: None self.config.add_section(sec)self.write_()defset_option(self,sec,opt,value): 对指定section下的某个option赋值 :param sec: 传入的块名 :param opt: 传入的项名 :param value: 传入的值 :return: None self.config.set(sec,opt,value)self.write_()# 写入文件defremove_sec(self,sec): 删除某个section :param sec: 传入的块名 :return: bool self.config.remove_section(sec)self.write_()# 写入文件defremove_opt(self,sec,opt): 删除某个section下的某个option :param sec: 传入的块名 :param opt: 传入的项名 :return: bool self.config.remove_option(sec,opt)self.write_()# 写入文件二 .yaml文件的操作类# -*- coding:utf-8 -*-# Time: 2021/7/5 10:26# Author: 华# File: Operation_yaml.py# Software: PyCharm备注示例的demo.yaml文件 test:it:ot:daihua# 下面是代码封装# 注意# pip install pyyamlimportyamlclassYamlOperation(dict):继承dict的类拥有dict的特性def__init__(self,file_pathNone,contentNone):super().__init__()iffile_pathisnotNone:withopen(file_path,r,encodingUTF-8)asfile:contentyaml.load(file,Loaderyaml.SafeLoader)# todo: 将yaml文件中读取的所有的key设置为类的属性contentcontentifcontentisnotNoneelse{}forkey,valueincontent.items():print(key)print(value)ifisinstance(value,dict):self[key]YamlOperation(contentvalue)else:self[key]valuedef__getattr__(self,key):访问不存在的属性key时返回NonereturnNonedef__setattr__(self,key,value):设置实例属性值self[key]valuedef__setitem__(self,key,value):给self[key]赋值super().__setattr__(key,value)super().__setitem__(key,value)def__missing__(self,key):访问的键key不存在时返回NonereturnNoneif__name____main__:importos dataYamlOperation(os.getcwd()/demo.yaml)print(data.test)# 输出{it: {ot: daihua}}print(data[test])# 输出{it: {ot: daihua}}print(data.get(test))# 输出{it: {ot: daihua}}print(data.test.it.ot)# 输出daihuaprint(data.it)# 调用__getattr__ 返回Noneprint(data[it])# 调用__missing__ 返回None三 .excel文件的操作类 xlrd1.2.0版本才有好的支持最新的支持不好# -*- coding:utf-8 -*-# Time: 2021/5/12 13:44# Author: 华# File: operate_excel.py# Software: PyCharmimportxlrd# 这里的版本1.2.0才支持.xlsfromxlutils.copyimportcopyimportdataclassOperationExcel(): 操作excel获取excel表格中的包括每一个单元格的数据如testapi中的url\headers\method def__init__(self,filepathdata.data_path\\interface.xlsx,sheet_id0): OperationExcel类初始化顺带获取了self.data,即指定sheet的所有数据 :param filepath:数据来源的文件地址 :param sheet_id:excel表单号sheet_id从0开始 self.filepathfilepath self.sheet_idsheet_id self.dataself.get_data()defget_data(self): 获取整个sheet表单对象 :return:table,即表单数据,是一个对象 dataxlrd.open_workbook(self.filepath)tabledata.sheets()[self.sheet_id]returntabledefget_lines(self): 获取sheet的内容所占用的行数 :return:self.lines行数加入类的属性供全局使用 self.linesself.data.nrowsreturnself.linesdefget_cell_value(self,row,column): 获取某一个单元格的内容 :param row: 行数,从0开始 :param column: 列数从0开始 :return: self.cell_value单元格值加入类的属性供全局使用 self.cell_valueself.data.cell_value(row,column)returnself.cell_valuedefwrite_cell_value(self,row,column,value): 写入单元格内容 :param row: 行数,从0开始 :param column: 列数从0开始 :param value:需要写入的data :return:None read_dataxlrd.open_workbook(self.filepath)write_datacopy(read_data)sheet_datawrite_data.get_sheet(self.sheet_id)sheet_data.write(row,column,value)write_data.save(self.filepath)defget_row_data(self,case_id): 根据caseid,找到对应用例所在行的内容 :param case_id:在本套代码中即表示excel中的api数据的ID :return:row_data用例行数据 row_numself.get_row_num(case_id)row_dataself.get_row_values(row_num)returnrow_datadefget_row_num(self,case_id): 根据case_id找到对应用例的行的行所在的索引号行号 主要方式循环遍历id列的值只要等于入参即返回循环的次数即为行的index :param case_id: :return: row_num0cols_dataself.get_col_data()#默认获取column0的列数据return数据为list类型forcol_dataincols_data:ifcase_idincol_data:returnrow_num row_numrow_num1defget_row_values(self,row): 根据行号row找到该行的内容 :param row: 行数,从0开始 :return: row_data,行数据list类型 row_dataself.data.row_values(row)returnrow_datadefget_col_data(self,column0): 根据列column获取某一列的内容 :param column: 列数从0开始 :return: col_data,列数据list类型 col_dataself.data.col_values(column)returncol_datadefget_excel_data(self): 获取excel里面的所有的数据,[],ddt的时候使用 :return: list fields_val_list[]# 这里从index1开始因为首行是表头不是请求数据foriinrange(1,self.get_lines()):fields_val_list.append(self.get_row_values(i))returnfields_val_listif__name____main__:# 示例获取默认表单对象# tab OperationExcel(sheet_id1).get_data()# print(tab)# 示例读取非sheet_id0的单元格数据dtOperationExcel(sheet_id1).get_cell_value(1,1)print(dt)四、 pandas 读取excel文件importpandasaspdimportopenpyxlclassOperationExcel(): 操作excel获取excel表格中的包括每一个单元格的数据如testapi中的url\headers\method def__init__(self,filepathNone): OperationExcel类初始化顺带获取了self.data,即指定sheet的所有数据 :param filepath:数据来源的文件地址 :param sheet_id:excel表单号sheet_id从0开始 self.filepathfilepath dtpd.read_excel(self.filepath)self.dfpd.DataFrame(dt)defget_rows_data(self,start_row,end_row): 获取多行数据 :return: returnself.df.loc[start_row:end_row]defget_cell_data(self,row_index,column_name): 获取某个单元格数据 :return: returnself.df.loc[row_index,column_name]if__name____main__:# 示例获取默认表单对象# tab OperationExcel(sheet_id1).get_data()# print(tab)# 示例读取非sheet_id0的单元格数据dtOperationExcel(filepathrD:\project\py_project\cgjgui\data\ele\elex.xls)# print(dt.get_rows_data(1, 2))print(dt.get_cell_data(1,description))五、 json文件的操作类Python接口自动化-简单总结包含excel/json操作封装、request的封装# coding:utf-8# Time : 2026/8/16 09:49# Author : ithing# FileName: json_operation.pyimportjsonclassOperationJson(): 操作json文件 def__init__(self,surce_path../resources/data/session.json):self.surce_pathsurce_path self.dataself.read_data()# 读取json文件defread_data(self):try:withopen(self.surce_path,r,encodingutf-8)asfp:datajson.load(fp)exceptExceptionase:data{error:文件读取错误}finally:returndata# 根据关键字获取数据defget_data(self,key):ifkeyinself.data:returnself.data[key]else:return%s对应的值不存在%key# 写jsondefwrite_data(self,value):try:withopen(self.surce_path,w,encodingutf-8)asfp:fp.write(json.dumps(value,ensure_asciiFalse,indent4))# indent 缩进ensure_asciiFalse: 不转义中文res写入成功exceptExceptionase:res写入错误请排查数据类型、关键字等,efinally:returnres
返回列表