共计 11435 个字符,预计需要花费 29 分钟才能阅读完成。
Python 中什么是配置文件,配置文件如何应用,有哪些反对的配置文件等内容,话不多说,让咱们一起看看吧~
1 什么是配置文件?
配置文件是用于配置计算机程序的参数和初始化设置的文件,如果没有这些配置程序可能无奈运行或是影响运行(运行速度、便捷性等),应用配置文件的益处在于,局部内容以及环境运行时只须要批改配置文件的参数内容,而无需去代码里查找并批改,进步便捷性、进步可维护性。
2 配置文件有哪几种?
配置次要有四种模式:
- 第一种是 YAML、JSON、XML、TOML、INI、Linux 零碎中的.bashrc 一类,次要利用于软件测试畛域,在软件测试的畛域行业中,大多数公司采纳最新的 YAML 模式来作为配置文件,例如数据库地址、用例数据等内容的寄存,而少部分公司依然采纳旧的 INI 配置模式
- 第二种是 excel 表格的模式,在 excel 表格中会有固定的 title 代表每个字段列的含意,有多列,以此来进行配置,多用于游戏畛域中,在游戏行业大量应用 excel 表格的模式,曾经是一个常态了。
- 第三种是 py 文件,py 文件对于一个纯 Python 我的项目而言是十分不便的,它不须要做数据的读取操作,只须要进行导入即可,不好的点在于,没有 YAML 这一类灵便,YAML 配置文件无论是 Python、Java 等语言,都是反对的,且数据类型反对很多,而 py 的配置文件,就只能用作于 python,有肯定的局限性。
- 第四种是 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.1
port = 3306
user = root
password = 123456
database = 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 ConfigParser
from pprint import pprint
import pymysql
# ini 文件门路
ini_file = './db.ini'
# 读取 ini 的节(Section)db_name = 'mysql'
# configparser 实例化
text = ConfigParser()
# 读取 ini 文件内容
text.read(ini_file)
# text.items() 返回 list,元素为 tuple, 元组格局为 key,value
db_tuple = text.items(db_name)
print(db_tuple)
# 将元组转换成 dict
db_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 json
from pprint import pprint
import pymysql
json_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 toml
from pprint import pprint
import pymysql
toml_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.yaml
mysql:
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 yaml
from pprint import pprint
import pymysql
yaml_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,否则为 1
table.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 xlrd
xlsx = 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.nrows
print("表格一共有",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=False
app.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 xw
app=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()
# 激活 worksheet
ws = wb.active
(2)关上已有
from openpyxl import load_workbook
wb = 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 ws4
True
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 openpyxl
from openpyxl.cell.cell import ILLEGAL_CHARACTERS_RE
from openpyxl.utils import get_column_letter, column_index_from_string
# 向 sheetobj 中的 columnname 列从 start_row 开始写入 listdata
def 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 总结
在本文中,简略介绍了几种配置文件和应用。依据不同的用例,简单的工具 / 框架并不总是比简略的软件包更好。但无论抉择哪一种,都应始终思考可读性,可维护性以及如何尽早地发现错误。事实上,能够说配置文件只是另一种类型的代码。能够依据本人的我的项目框架来灵活运用啦~
作者:京东物流 王小云
起源:京东云开发者社区