Python中什么是配置文件,配置文件如何使用,有哪些支持的配置文件等內(nèi)容,話不多說,讓我們一起看看吧~
1 什么是配置文件?配置文件是用于配置計算機(jī)程序的參數(shù)和初始化設(shè)置的文件,如果沒有這些配置程序可能無法運(yùn)行或是影響運(yùn)行(運(yùn)行速度、便捷性等),使用配置文件的好處在于,部分內(nèi)容以及環(huán)境運(yùn)行時只需要修改配置文件的參數(shù)內(nèi)容,而無需去代碼里查找并修改,提高便捷性、提高可維護(hù)性。
(資料圖片僅供參考)
配置主要有四種形式:
第一種是YAML、JSON、XML、TOML、INI、Linux系統(tǒng)中的.bashrc一類,主要應(yīng)用于軟件測試領(lǐng)域,在軟件測試的領(lǐng)域行業(yè)中,大多數(shù)公司采用最新的YAML形式來作為配置文件,例如數(shù)據(jù)庫地址、用例數(shù)據(jù)等內(nèi)容的存放,而少部分公司仍然采用舊的INI配置形式第二種是excel表格的形式,在excel表格中會有固定的title代表每個字段列的含義,有多列,以此來進(jìn)行配置,多用于游戲領(lǐng)域中,在游戲行業(yè)大量使用excel表格的形式,已經(jīng)是一個常態(tài)了。第三種是py文件,py文件對于一個純Python項目而言是非常方便的,它不需要做數(shù)據(jù)的讀取操作,只需要進(jìn)行導(dǎo)入即可,不好的點在于,沒有YAML這一類靈活,YAML配置文件無論是Python、Java等語言,都是支持的,且數(shù)據(jù)類型支持很多,而py的配置文件,就只能用作于python,有一定的局限性。第四種是txt文本格式,通過讀取的方式來識別到txt文本內(nèi)容,通常而言是測開或者測試工程師制作的簡便工具,供給業(yè)務(wù)層面的測試人員進(jìn)行使用,降低了YAML這種配置的理解難度,也避免了打開excel的緩慢,用輕量級txt來代替是一個不錯的選擇。2.1 inipython3自帶的ini.ini 文件是Initialization File的縮寫,即初始化文件,是windows的系統(tǒng)配置文件所采用的存儲格式,統(tǒng)管windows的各項配置
2.1.1 ini文件的定義.ini 文件通常由節(jié)(Section)、鍵(key)和值(value)組成。具體形式如下:
db.ini[mysql]host = 127.0.0.1port = 3306user = rootpassword = 123456database = test
2.1.2 python讀取ini文件使用python內(nèi)置的 configparser 標(biāo)準(zhǔn)庫進(jìn)行解析ini文件。read() 讀取文件內(nèi)容 items() 獲取指定節(jié)的所有鍵值對
# -*- 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的節(jié)(Section)db_name = "mysql"# configparser實例化text = ConfigParser()# 讀取ini文件內(nèi)容text.read(ini_file)# text.items()返回list,元素為tuple,元組格式為 key,valuedb_tuple = text.items(db_name)print(db_tuple)# 將元組轉(zhuǎn)換成dictdb_dict = dict(text.items(db_name))print(db_dict)
2.2 jsonJSON(JavaScript Object Notation,) 是一種輕量級的數(shù)據(jù)交換格式。
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格式數(shù)據(jù)loads() 將字符串類型數(shù)據(jù)轉(zhuǎn)化為json格式數(shù)據(jù)dump() 將json格式數(shù)據(jù)保存到文件dumps() 將json格式數(shù)據(jù)保存為字符串類型
# -*- 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 tomlTOML 是 Github 聯(lián)合創(chuàng)始人 Tom Preston-Werner 所提出的一種配置文件格式,是一種旨在成為一個小規(guī)模、易于使用的語義化的配置文件格式,它被設(shè)計為可以無二義性的轉(zhuǎn)換為一個哈希表。
2.3.1 定義toml文件語法:TOML的語法廣泛地由key = “value”、[節(jié)名]、#注釋構(gòu)成。支持以下數(shù)據(jù)類型:字符串、整形、浮點型、布爾型、日期時間、數(shù)組和圖表。
# 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 yamlYAML(YAML Ain’t a Markup Language”, YAML不是一種標(biāo)記語言) 格式是目前較為流行的一種配置文件,它早在 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 讀取 操作Excelpython Excel庫對比
本次主要關(guān)注python xlrd讀取 操作excel
2.5.1 xlrd模塊介紹1.什么是xlrd模塊?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。
2.為什么使用xlrd模塊?在UI自動化或者接口自動化中數(shù)據(jù)維護(hù)是一個核心,所以此模塊非常實用。xlrd模塊可以用于讀取Excel的數(shù)據(jù),速度非常快,推薦使用!官方文檔:https://xlrd.readthedocs.io/en/latest/
2.5.2 安裝xlrd模塊到python官網(wǎng)下載http://pypi.python.org/pypi/xlrd 模塊安裝,前提是已經(jīng)安裝了python 環(huán)境。或者在cmd窗口 pip install xlrd最新的xlrd不支持Excel xlsx文件的讀取。所以需要安裝舊版本 pip install xlrd==1.2.0
2.5.3 使用介紹1.常用單元格的數(shù)據(jù)類型
empty(空的)string(text)numberdatebooleanerrorblank(空白表格)2.導(dǎo)入模塊
import xlrd
3.打開Excel文件讀取數(shù)據(jù)
data = xlrd.open_workbook(filename)#文件名以及路徑,如果路徑或者文件名有中文給前面加一個 r
4.常用的函數(shù)excel中最重要的方法就是book和sheet的操作
獲取book(excel文件)中一個工作表table = data.sheets()[0] #通過索引順序獲取table = data.sheet_by_index(sheet_indx) #通過索引順序獲取table = data.sheet_by_name(sheet_name) #通過名稱獲取# 以上三個函數(shù)都會返回一個xlrd.sheet.Sheet()對象names = data.sheet_names() #返回book中所有工作表的名字data.sheet_loaded(sheet_name or indx) # 檢查某個sheet是否導(dǎo)入完畢
行的操作nrows = table.nrows # 獲取該sheet中的行數(shù),注,這里table.nrows后面不帶().table.row(rowx) # 返回由該行中所有的單元格對象組成的列表,這與tabel.raw()方法并沒有區(qū)別。table.row_slice(rowx) # 返回由該行中所有的單元格對象組成的列表table.row_types(rowx, start_colx=0, end_colx=None) # 返回由該行中所有單元格的數(shù)據(jù)類型組成的列表; # 返回值為邏輯值列表,若類型為empy則為0,否則為1table.row_values(rowx, start_colx=0, end_colx=None) # 返回由該行中所有單元格的數(shù)據(jù)組成的列表table.row_len(rowx) # 返回該行的有效單元格長度,即這一行有多少個數(shù)據(jù)
列(colnum)的操作ncols = table.ncols # 獲取列表的有效列數(shù)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) # 返回由該列中所有單元格的數(shù)據(jù)類型組成的列表table.col_values(colx, start_rowx=0, end_rowx=None) # 返回由該列中所有單元格的數(shù)據(jù)組成的列表
單元格的操作table.cell(rowx,colx) # 返回單元格對象table.cell_type(rowx,colx) # 返回對應(yīng)位置單元格中的數(shù)據(jù)類型table.cell_value(rowx,colx) # 返回對應(yīng)位置單元格中的數(shù)據(jù)
2.5.4 實戰(zhàn)訓(xùn)練使用xlrd模塊進(jìn)行讀?。?/p>
import xlrdxlsx = xlrd.open_workbook("./3_1 xlrd 讀取 操作練習(xí).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)# 獲取表格行數(shù)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表格或者在原表格基礎(chǔ)上進(jìn)行修改,速度也很快,推薦使用!官方文檔:https://xlwt.readthedocs.io/en/latest/
2.6.1 pip安裝xlwtpip install xlwt
2.6.2 使用xlwt創(chuàng)建新表格并寫入編寫xlwt新表格寫入程序:
# 3.2.2 使用xlwt創(chuàng)建新表格并寫入def fun3_2_2(): # 創(chuàng)建新的workbook(其實就是創(chuàng)建新的excel) workbook = xlwt.Workbook(encoding= "ascii") # 創(chuàng)建新的sheet表 worksheet = workbook.add_sheet("My new Sheet") # 往表格寫入內(nèi)容 worksheet.write(0,0, "內(nèi)容1") worksheet.write(2,1, "內(nèi)容2") # 保存 workbook.save("新創(chuàng)建的表格.xls")
2.6.3 xlwt 設(shè)置字體格式程序示例:
# 3.2.3 xlwt設(shè)置字體格式def fun3_2_3(): # 創(chuàng)建新的workbook(其實就是創(chuàng)建新的excel) workbook = xlwt.Workbook(encoding= "ascii") # 創(chuàng)建新的sheet表 worksheet = workbook.add_sheet("My new Sheet") # 初始化樣式 style = xlwt.XFStyle() # 創(chuàng)建字體樣式 font = xlwt.Font() font.name = "Times New Roman" #字體 font.bold = True #加粗 font.underline = True #下劃線 font.italic = True #斜體 # 設(shè)置樣式 style.font = font # 往表格寫入內(nèi)容 worksheet.write(0,0, "內(nèi)容1") worksheet.write(2,1, "內(nèi)容2",style) # 保存 workbook.save("新創(chuàng)建的表格.xls") # 設(shè)置列寬 worksheet.col(0).width = 256*20 # 設(shè)置行高 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") # 設(shè)置邊框樣式 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 修改 操作Excelxlutils可用于拷貝原excel或者在原excel基礎(chǔ)上進(jìn)行修改,并保存;官方文檔:https://xlutils.readthedocs.io/en/latest/
2.7.1 pip安裝xlutilspip install xlutils
2.7.2 xlutils拷貝源文件(需配合xlrd使用)程序示例:
# 3.3.2 拷貝源文件def fun3_3_2(): workbook = xlrd.open_workbook("3_3 xlutils 修改操作練習(xí).xlsx") # 打開工作簿 new_workbook = copy(workbook) # 將xlrd對象拷貝轉(zhuǎn)化為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 修改操作練習(xí).xlsx") new_workbook = copy(workbook) # 將xlrd對象拷貝轉(zhuǎn)化為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 讀取 寫入 修改 操作Excel2.8.1 pip安裝xlwingspip install xlwings
2.8.2 基本操作引入庫import xlwings as xw(1)打開已存在的Excel文檔
# 導(dǎo)入xlwings模塊import xlwings as xw# 打開Excel程序,默認(rèn)設(shè)置:程序可見,只打開不新建工作薄,屏幕更新關(guān)閉app=xw.App(visible=True,add_book=False)app.display_alerts=Falseapp.screen_updating=False# 文件位置:filepath,打開test文檔,然后保存,關(guān)閉,結(jié)束程序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的第一個單元格輸入 “人生” ,然后保存關(guān)閉,退出Excel程序。
def fun3_4_4(): # 新建Excle 默認(rèn)設(shè)置:程序可見,只打開不新建工作薄,屏幕更新關(guān)閉 app = xw.App(visible=True, add_book=False) app.display_alerts = False app.screen_updating = False # 打開已存在的Excel文件 wb=app.books.open("./3_4 xlwings 修改操作練習(xí).xlsx") # 獲取sheet對象 print(wb.sheets) sheet = wb.sheets[0] # sheet = wb.sheets["sheet1"] # 讀取Excel信息 cellB1_value = sheet.range("B1").value print("單元格B1內(nèi)容為:",cellB1_value) # 清除單元格內(nèi)容和格式 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就是圍繞著這三個概念進(jìn)行的,不管讀寫都是“三板斧”:打開Workbook,定位Sheet,操作Cell。官方文檔:https://openpyxl.readthedocs.io/en/stable/1.安裝pip install openpyxl2.打開文件(1)新建
from openpyxl import Workbook # 實例化wb = Workbook()# 激活 worksheetws = wb.active
(2)打開已有
from openpyxl import load_workbookwb = load_workbook("文件名稱.xlsx")
3.寫入數(shù)據(jù)
# 方式一:數(shù)據(jù)可以直接分配到單元格中(可以輸入公式)ws["A1"] = 42# 方式二:可以附加行,從第一列開始附加(從最下方空白處,最左開始)(可以輸入多行)ws.append([1, 2, 3])# 方式三:Python 類型會被自動轉(zhuǎn)換ws["A3"] = datetime.datetime.now().strftime("%Y-%m-%d")
4.創(chuàng)建表(sheet)
# 方式一:插入到最后(default)ws1 = wb.create_sheet("Mysheet") # 方式二:插入到最開始的位置ws2 = wb.create_sheet("Mysheet", 0)
5.選擇表(sheet)
# sheet 名稱可以作為 key 進(jìn)行索引>>> 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.保存數(shù)據(jù)
wb.save("文件名稱.xlsx")
8.其它(1)改變sheet標(biāo)簽按鈕顏色
ws.sheet_properties.tabColor = "1072BA" # 色值為RGB16進(jìn)制值
(2)獲取最大行,最大列
# 獲得最大列和最大行print(sheet.max_row)print(sheet.max_column)
(3)獲取每一行每一列sheet.rows為生成器, 里面是每一行的數(shù)據(jù),每一行又由一個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)根據(jù)數(shù)字得到字母,根據(jù)字母得到數(shù)字
from openpyxl.utils import get_column_letter, column_index_from_string# 根據(jù)列的數(shù)字返回字母print(get_column_letter(2)) # B# 根據(jù)字母返回列的數(shù)字print(column_index_from_string("D")) # 4
(5)刪除工作表
# 方式一wb.remove(sheet)# 方式二del wb[sheet]
項目實操—-UI自動化中實踐項目需求:業(yè)務(wù)寫入揀貨容器,使用一次不可使用第二次,且腳本中固定讀取固定位置
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): # 根據(jù)列名獲取列索引 colindex = column_index_from_string(column_name) print("colindex為{}".format(colindex)) # 循環(huán)從開始行數(shù)到數(shù)據(jù)寫入后最后一行 for rowindex in range(start_row, start_row + len(listdata)): # 寫入list數(shù)值根據(jù)索引取值,從0開始 val = listdata[rowindex - start_row] print("val{}".format(val)) print("rowindex{}".format(rowindex)) try: sheetobj.cell(row = rowindex,column = colindex,value = val) except: # 出現(xiàn)非法字符時,可以將字符串的非法字符替換掉 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 總結(jié)在本文中,簡單介紹了幾種配置文件和使用。根據(jù)不同的用例,復(fù)雜的工具/框架并不總是比簡單的軟件包更好。但無論選擇哪一種,都應(yīng)始終考慮可讀性,可維護(hù)性以及如何盡早地發(fā)現(xiàn)錯誤。事實上,可以說配置文件只是另一種類型的代碼??梢愿鶕?jù)自己的項目框架來靈活運(yùn)用啦~
作者:京東物流王小云
來源:京東云開發(fā)者社區(qū)
Copyright @ 2015-2022 海外生活網(wǎng)版權(quán)所有 備案號: 滬ICP備2020036824號-21 聯(lián)系郵箱:562 66 29@qq.com