Python中什么是配置文件,配置文件如何应用,有哪些反对的配置文件等内容,话不多说,让咱们一起看看吧~

1 什么是配置文件?

配置文件是用于配置计算机程序的参数和初始化设置的文件,如果没有这些配置程序可能无奈运行或是影响运行(运行速度、便捷性等),应用配置文件的益处在于,局部内容以及环境运行时只须要批改配置文件的参数内容,而无需去代码里查找并批改,进步便捷性、进步可维护性。

2 配置文件有哪几种?

配置次要有四种模式:

  1. 第一种是YAML、JSON、XML、TOML、INI、Linux零碎中的.bashrc一类,次要利用于软件测试畛域,在软件测试的畛域行业中,大多数公司采纳最新的YAML模式来作为配置文件,例如数据库地址、用例数据等内容的寄存,而少部分公司依然采纳旧的INI配置模式
  2. 第二种是excel表格的模式,在excel表格中会有固定的title代表每个字段列的含意,有多列,以此来进行配置,多用于游戏畛域中,在游戏行业大量应用excel表格的模式,曾经是一个常态了。
  3. 第三种是py文件,py文件对于一个纯Python我的项目而言是十分不便的,它不须要做数据的读取操作,只须要进行导入即可,不好的点在于,没有YAML这一类灵便,YAML配置文件无论是Python、Java等语言,都是反对的,且数据类型反对很多,而py的配置文件,就只能用作于python,有肯定的局限性。
  4. 第四种是txt文本格式,通过读取的形式来辨认到txt文本内容,通常而言是测开或者测试工程师制作的简便工具,供应业务层面的测试人员进行应用,升高了YAML这种配置的了解难度,也防止了关上excel的迟缓,用轻量级txt来代替是一个不错的抉择。

2.1 ini

python3自带的ini
.ini 文件是Initialization File的缩写,即初始化文件,是windows的零碎配置文件所采纳的存储格局,统管windows的各项配置

2.1.1 ini文件的定义

.ini 文件通常由节(Section)、键(key)和值(value)组成。具体模式如下:

db.ini[mysql]host = 127.0.0.1port = 3306user = rootpassword = 123456database = test

2.1.2 python读取ini文件

应用python内置的 configparser 规范库进行解析ini文件。
read() 读取文件内容 items() 获取指定节的所有键值对

# -*- coding: utf-8 -*-''' * @Author       : wxy * @Date         : 2022-08-24 11:11:06 * @Description  : 读取ini文件 * @LastEditTime : 2022-08-24 11:11:06'''from configparser import ConfigParserfrom pprint import pprintimport pymysql# ini文件门路ini_file = './db.ini'# 读取ini的节(Section)db_name = 'mysql'# configparser实例化text = ConfigParser()# 读取ini文件内容text.read(ini_file)# text.items()返回list,元素为tuple,元组格局为 key,valuedb_tuple = text.items(db_name)print(db_tuple)# 将元组转换成dictdb_dict = dict(text.items(db_name))print(db_dict)

2.2 json

JSON(JavaScript Object Notation,) 是一种轻量级的数据交换格局。

2.2.1 json文件的定义

简略的json示例

  {        "mysql": {            "host": "127.0.0.1",            "port": 3306,            "user": "root",            "password": "123456",            "database": "test"        }    }

2.2.2 python读取json文件

load() 从json文件中读取json格局数据
loads() 将字符串类型数据转化为json格局数据
dump() 将json格局数据保留到文件
dumps() 将json格局数据保留为字符串类型

# -*- coding: utf-8 -*-''' * @Author       : wxy * @Date         : 2022-8-24 11:39:44 * @Description  : 读取json文件 * @LastEditTime : 2022-8-24 11:39:44'''import jsonfrom pprint import pprintimport pymysqljson_file = "./db.json"db_name = "mysql"web = "web"with open(json_file) as f:    cfg = json.load(f)[db_name]    print(cfg)with open(json_file) as f:    cfg = json.load(f)[web]    print(cfg['user'])

2.3 toml

TOML 是 Github 联结创始人 Tom Preston-Werner 所提出的一种配置文件格式,是一种旨在成为一个小规模、易于应用的语义化的配置文件格式,它被设计为能够无二义性的转换为一个哈希表。

2.3.1 定义toml文件

语法:
TOML的语法宽泛地由key = “value”、[节名]、#正文形成。
反对以下数据类型:字符串、整形、浮点型、布尔型、日期工夫、数组和图表。

 # db.toml[mysql]    [mysql.config]    host     = "127.0.0.1"    user     = "root"    port     = 3306    password = "123456"    database = "test"    [mysql.parameters]    pool_size = 5    charset   = "utf8"    [mysql.fields]    course_cols = ["cno", "cname", "ccredit", "cdept"]

2.3.2 python读取toml文件

应用内部库 toml 解析toml文件

# -*- coding: utf-8 -*-''' * @Description  : 读取toml文件 * @LastEditTime : 2022-08-14 11:31:07'''import tomlfrom pprint import pprintimport pymysqltoml_file = "./db.toml"cfg = toml.load(toml_file)['mysql']pprint(cfg)

2.4 yaml

YAML(YAML Ain’t a Markup Language”, YAML不是一种标记语言) 格局是目前较为风行的一种配置文件,它早在 2001 由一个名为 Clark Evans 的人提出;同时它也是目前被宽泛应用的配置文件类型。

2.4.1 定义yaml文件

# db.yamlmysql:  config:    host: "127.0.0.1"    port: 3306    user: "root"    password: ""    database: "stu_sys"  parameters:    pool_size: 5    charset: "utf8"  fileds:    course_cols:      - cno      - cname      - ccredit      - cdept

2.4.2 python读取yaml文件

应用内部库 pyyaml 解析toml文件。

# -*- coding: utf-8 -*-''' * @Author       : wxy * @Date         : 2022-8-24 11:34:37 * @Description  : 读取yaml文件 * @LastEditTime : 2022-8-24 11:34:37'''import yamlfrom pprint import pprintimport pymysqlyaml_file = "./db.yaml"with open(yaml_file, 'r') as f:    cfg = yaml.safe_load(f)print(cfg)

2.5 Python xlrd 读取 操作Excel

python Excel库比照

[]()

本次次要关注python xlrd读取 操作excel

2.5.1 xlrd模块介绍

1.什么是xlrd模块?
python操作excel次要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库。

2.为什么应用xlrd模块?
在UI自动化或者接口自动化中数据保护是一个外围,所以此模块十分实用。
xlrd模块能够用于读取Excel的数据,速度十分快,举荐应用!
官网文档:https://xlrd.readthedocs.io/en/latest/

2.5.2 装置xlrd模块

到python官网下载http://pypi.python.org/pypi/xlrd 模块装置,前提是曾经装置了python 环境。
或者在cmd窗口 pip install xlrd
最新的xlrd不反对Excel xlsx文件的读取。所以须要装置旧版本 pip install xlrd==1.2.0

2.5.3 应用介绍

1.罕用单元格的数据类型

  • empty(空的)
  • string(text)
  • number
  • date
  • boolean
  • error
  • blank(空白表格)

2.导入模块

import xlrd

3.关上Excel文件读取数据

data = xlrd.open_workbook(filename)#文件名以及门路,如果门路或者文件名有中文给后面加一个 r

4.罕用的函数
excel中最重要的办法就是book和sheet的操作

  • 获取book(excel文件)中一个工作表
table = data.sheets()[0]             #通过索引程序获取table = data.sheet_by_index(sheet_indx)  #通过索引程序获取table = data.sheet_by_name(sheet_name)  #通过名称获取# 以上三个函数都会返回一个xlrd.sheet.Sheet()对象names = data.sheet_names()        #返回book中所有工作表的名字data.sheet_loaded(sheet_name or indx)    # 查看某个sheet是否导入结束
  • 行的操作
nrows = table.nrows    # 获取该sheet中的行数,注,这里table.nrows前面不带().table.row(rowx)    # 返回由该行中所有的单元格对象组成的列表,这与tabel.raw()办法并没有区别。table.row_slice(rowx)    # 返回由该行中所有的单元格对象组成的列表table.row_types(rowx, start_colx=0, end_colx=None)    # 返回由该行中所有单元格的数据类型组成的列表;        # 返回值为逻辑值列表,若类型为empy则为0,否则为1table.row_values(rowx, start_colx=0, end_colx=None)    # 返回由该行中所有单元格的数据组成的列表table.row_len(rowx)    # 返回该行的无效单元格长度,即这一行有多少个数据
  • 列(colnum)的操作
ncols = table.ncols    # 获取列表的无效列数table.col(colx, start_rowx=0, end_rowx=None)    # 返回由该列中所有的单元格对象组成的列表table.col_slice(colx, start_rowx=0, end_rowx=None)    # 返回由该列中所有的单元格对象组成的列表table.col_types(colx, start_rowx=0, end_rowx=None)    # 返回由该列中所有单元格的数据类型组成的列表table.col_values(colx, start_rowx=0, end_rowx=None)    # 返回由该列中所有单元格的数据组成的列表
  • 单元格的操作
table.cell(rowx,colx)    # 返回单元格对象table.cell_type(rowx,colx)    # 返回对应地位单元格中的数据类型table.cell_value(rowx,colx)    # 返回对应地位单元格中的数据

2.5.4 实战训练

应用xlrd模块进行读取:

import xlrdxlsx = xlrd.open_workbook('./3_1 xlrd 读取 操作练习.xlsx')# 通过sheet名查找:xlsx.sheet_by_name("sheet1")# 通过索引查找:xlsx.sheet_by_index(3)table = xlsx.sheet_by_index(0)# 获取单个表格值 (2,1)示意获取第3行第2列单元格的值value = table.cell_value(2, 1)print("第3行2列值为",value)# 获取表格行数nrows = table.nrowsprint("表格一共有",nrows,"行")# 获取第4列所有值(列表生成式)name_list = [str(table.cell_value(i, 3)) for i in range(1, nrows)]print("第4列所有的值:",name_list)

2.6 Python xlwt 写入 操作Excel(仅限xls格局!)

xlwt能够用于写入新的Excel表格或者在原表格根底上进行批改,速度也很快,举荐应用!
官网文档:https://xlwt.readthedocs.io/en/latest/

2.6.1 pip装置xlwt

pip install xlwt

2.6.2 应用xlwt创立新表格并写入

编写xlwt新表格写入程序:

# 3.2.2 应用xlwt创立新表格并写入def fun3_2_2():    # 创立新的workbook(其实就是创立新的excel)    workbook = xlwt.Workbook(encoding= 'ascii')    # 创立新的sheet表    worksheet = workbook.add_sheet("My new Sheet")    # 往表格写入内容    worksheet.write(0,0, "内容1")    worksheet.write(2,1, "内容2")    # 保留    workbook.save("新创建的表格.xls")

2.6.3 xlwt 设置字体格局

程序示例:

# 3.2.3 xlwt设置字体格局def fun3_2_3():    # 创立新的workbook(其实就是创立新的excel)    workbook = xlwt.Workbook(encoding= 'ascii')    # 创立新的sheet表    worksheet = workbook.add_sheet("My new Sheet")    # 初始化款式    style = xlwt.XFStyle()    # 创立字体款式    font = xlwt.Font()    font.name = 'Times New Roman'   #字体    font.bold = True                #加粗    font.underline = True           #下划线    font.italic = True              #斜体    # 设置款式    style.font = font    # 往表格写入内容    worksheet.write(0,0, "内容1")    worksheet.write(2,1, "内容2",style)    # 保留    workbook.save("新创建的表格.xls")    # 设置列宽    worksheet.col(0).width = 256*20     # 设置行高    style = xlwt.easyxf('font:height 360;')  # 18pt,类型小初的字号    row = worksheet.row(0)    row.set_style(style)     # 合并 第1行到第2行 的 第0列到第3列    worksheet.write_merge(1, 2, 0, 3, 'Merge Test')      # 设置边框款式    borders = xlwt.Borders()  # Create Borders    borders.left = xlwt.Borders.DASHED    borders.right = xlwt.Borders.DASHED    borders.top = xlwt.Borders.DASHED    borders.bottom = xlwt.Borders.DASHED    borders.left_colour = 0x40    borders.right_colour = 0x40    borders.top_colour = 0x40  borders.bottom_colour = 0x40

2.7 Python xlutils 批改 操作Excel

xlutils可用于拷贝原excel或者在原excel根底上进行批改,并保留;
官网文档:https://xlutils.readthedocs.io/en/latest/

2.7.1 pip装置xlutils

pip install xlutils

2.7.2 xlutils拷贝源文件(需配合xlrd应用)

程序示例:

# 3.3.2 拷贝源文件def fun3_3_2():    workbook = xlrd.open_workbook('3_3 xlutils 批改操作练习.xlsx')  # 关上工作簿    new_workbook = copy(workbook)  # 将xlrd对象拷贝转化为xlwt对象    new_workbook.save("new_test.xls")  # 保留工作簿

2.7.3 xlutils 读取 写入 (也就是批改)Excel 表格信息

程序示例:

# 3.3.3 xlutils读取 写入 Excel 表格信息def fun3_3_3():    # file_path:文件门路,蕴含文件的全名称    # formatting_info=True:保留Excel的原格局(应用与xlsx文件)    workbook = xlrd.open_workbook('3_3 xlutils 批改操作练习.xlsx')    new_workbook = copy(workbook)  # 将xlrd对象拷贝转化为xlwt对象    # 读取表格信息    sheet = workbook.sheet_by_index(0)    col2 = sheet.col_values(1)  # 取出第二列    cel_value = sheet.cell_value(1, 1)    print(col2)    print(cel_value)    # 写入表格信息    write_save = new_workbook.get_sheet(0)    write_save.write(0, 0, "xlutils写入!")    new_workbook.save("new_test.xls")  # 保留工作簿

2.8 Python xlwings 读取 写入 批改 操作Excel

2.8.1 pip装置xlwings

pip install xlwings

2.8.2 基本操作

引入库
import xlwings as xw
(1)关上已存在的Excel文档

# 导入xlwings模块import xlwings as xw# 关上Excel程序,默认设置:程序可见,只关上不新建工作薄,屏幕更新敞开app=xw.App(visible=True,add_book=False)app.display_alerts=Falseapp.screen_updating=False# 文件地位:filepath,关上test文档,而后保留,敞开,完结程序filepath=r'g:\Python Scripts\test.xlsx'wb=app.books.open(filepath)wb.save()wb.close()app.quit()

(2)新建Excel文档,命名为test.xlsx,并保留在D盘

import xlwings as xwapp=xw.App(visible=True,add_book=False)wb=app.books.add()wb.save(r'd:\test.xlsx')wb.close()app.quit()

(3) xlwings 读写 Excel
新建test.xlsx,在sheet1的第一个单元格输出 “人生” ,而后保留敞开,退出Excel程序。

def fun3_4_4():    # 新建Excle 默认设置:程序可见,只关上不新建工作薄,屏幕更新敞开    app = xw.App(visible=True, add_book=False)    app.display_alerts = False    app.screen_updating = False    # 关上已存在的Excel文件    wb=app.books.open('./3_4 xlwings 批改操作练习.xlsx')    # 获取sheet对象    print(wb.sheets)    sheet = wb.sheets[0]    # sheet = wb.sheets["sheet1"]    # 读取Excel信息    cellB1_value = sheet.range('B1').value    print("单元格B1内容为:",cellB1_value)    # 革除单元格内容和格局    sheet.range('A1').clear()    # 写入单元格    sheet.range('A1').value = "xlwings写入"    # 保留工作簿    wb.save('example_3.xlsx')    # 退出工作簿    wb.close()    # 退出Excel    app.quit()l

2.9 Python openpyxl 读取 写入 批改 操作Excel

在openpyxl中,次要用到三个概念:Workbooks,Sheets,Cells。
Workbook就是一个excel工作表;
Sheet是工作表中的一张表页;
Cell就是简略的一个格。
openpyxl就是围绕着这三个概念进行的,不论读写都是“三板斧”:关上Workbook,定位Sheet,操作Cell。
官网文档:https://openpyxl.readthedocs.io/en/stable/
1.装置
pip install openpyxl
2.关上文件
(1)新建

from  openpyxl import  Workbook # 实例化wb = Workbook()# 激活 worksheetws = wb.active

(2)关上已有

from openpyxl  import load_workbookwb = load_workbook('文件名称.xlsx')

3.写入数据

# 形式一:数据能够间接调配到单元格中(能够输出公式)ws['A1'] = 42# 形式二:能够附加行,从第一列开始附加(从最下方空白处,最左开始)(能够输出多行)ws.append([1, 2, 3])# 形式三:Python 类型会被主动转换ws['A3'] = datetime.datetime.now().strftime("%Y-%m-%d")

4.创立表(sheet)

# 形式一:插入到最初(default)ws1 = wb.create_sheet("Mysheet") # 形式二:插入到最开始的地位ws2 = wb.create_sheet("Mysheet", 0)

5.抉择表(sheet)

# sheet 名称能够作为 key 进行索引>>> ws3 = wb["New Title"]>>> ws4 = wb.get_sheet_by_name("New Title")>>> ws is ws3 is ws4True

6.查看表名(sheet)

# 显示所有表名>>> print(wb.sheetnames)['Sheet2', 'New Title',  'Sheet1']# 遍历所有表>>> for sheet in  wb:...     print(sheet.title)

7.保留数据

wb.save('文件名称.xlsx')

8.其它
(1)扭转sheet标签按钮色彩

ws.sheet_properties.tabColor = "1072BA" # 色值为RGB16进制值

(2)获取最大行,最大列

# 取得最大列和最大行print(sheet.max_row)print(sheet.max_column)

(3)获取每一行每一列
sheet.rows为生成器, 外面是每一行的数据,每一行又由一个tuple包裹。
sheet.columns相似,不过外面是每个tuple是每一列的单元格。

# 因为按行,所以返回A1, B1, C1这样的程序for row in sheet.rows:    for cell in row:        print(cell.value)# A1, A2, A3这样的程序for column in sheet.columns:    for cell in column:        print(cell.value)

(4)依据数字失去字母,依据字母失去数字

from openpyxl.utils import get_column_letter, column_index_from_string# 依据列的数字返回字母print(get_column_letter(2))  # B# 依据字母返回列的数字print(column_index_from_string('D'))  # 4

(5)删除工作表

# 形式一wb.remove(sheet)# 形式二del wb[sheet]

我的项目实操—-UI自动化中实际我的项目
需要:业务写入拣货容器,应用一次不可应用第二次,且脚本中固定读取固定地位

import openpyxlfrom openpyxl.cell.cell import ILLEGAL_CHARACTERS_REfrom openpyxl.utils import get_column_letter, column_index_from_string# 向sheetobj中的columnname列从start_row开始写入listdatadef insert_listdata_to_column(sheetobj,listdata,column_name,start_row=3):    # 依据列名获取列索引    colindex = column_index_from_string(column_name)    print('colindex为{}'.format(colindex))    # 循环从开始行数到数据写入后最初一行    for rowindex in range(start_row, start_row + len(listdata)):        # 写入list数值依据索引取值,从0开始        val = listdata[rowindex - start_row]        print('val{}'.format(val))        print('rowindex{}'.format(rowindex))        try:            sheetobj.cell(row = rowindex,column = colindex,value = val)        except:            # 呈现非法字符时,能够将字符串的非法字符替换掉            val = ILLEGAL_CHARACTERS_RE.sub(r'',val)            sheetobj.cell(row = rowindex,column = colindex,value = val)    delrow = start_row + len(listdata)    print('*********{}'.format(delrow))    sheetobj.delete_rows(delrow)def del_excel():    xlsx = xlrd.open_workbook(r'D:\pytest\inbound_data.xlsx')    table =xlsx.sheet_by_index(2)    # 获取第2列所有值    cel_value =table.col_values(1)    cel_value=cel_value[3::]    wb = openpyxl.load_workbook(r'D:\pytest\inbound_data.xlsx')    sheet = wb["B2B出库"]    print(sheet)    insert_listdata_to_column(sheet,cel_value,'B',3)    wb.save(r'D:\pytest\inbound_data.xlsx')del_excel()

3 总结

在本文中,简略介绍了几种配置文件和应用。依据不同的用例,简单的工具/框架并不总是比简略的软件包更好。但无论抉择哪一种,都应始终思考可读性,可维护性以及如何尽早地发现错误。事实上,能够说配置文件只是另一种类型的代码。能够依据本人的我的项目框架来灵活运用啦~

作者:京东物流 王小云

起源:京东云开发者社区