日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

excel sheet限制_Python 处理Excel内的数据(案例介绍*3)

發(fā)布時間:2025/3/15 python 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 excel sheet限制_Python 处理Excel内的数据(案例介绍*3) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
點(diǎn)擊上方“藍(lán)字”關(guān)注我們了解更多精彩案例一介紹

現(xiàn)在有一批電商產(chǎn)品跟當(dāng)日銷量的數(shù)據(jù),如下,總共有上萬筆的數(shù)據(jù),現(xiàn)在需要統(tǒng)計每個品牌當(dāng)日的銷售量,比如美寶蓮今天總共賣出了多少的商品,另外需要統(tǒng)計每個品牌下面的每個子品類當(dāng)日銷售量(品類可分為口紅、睫毛膏、粉底等),比如卡姿蘭口紅賣了多少、眉筆賣了多少。


首先是要做出關(guān)鍵字碼表,如下,這些是透過電商常用的產(chǎn)品稱呼和觀察發(fā)現(xiàn)的,需要對商品名稱有一定的了解,比如歐萊雅的潔面膏其實(shí)就是洗面奶


后面就是建立一個list,里面包含這些子品類,用這些關(guān)鍵字和品牌名稱在商品列表逐一做匹配,比如商品里有“卡姿蘭”又有“口紅”的,再將符合的商品銷售數(shù)量累加,輸出至excel里,就可以完成統(tǒng)計,代碼如下import?xlrdimport xlwtreadbook = xlrd.open_workbook(r'brand.xlsx')sheet = readbook.sheet_by_index(0)cols1=sheet.col_values(0)cols2=sheet.col_values(1)workbook = xlwt.Workbook(encoding='utf-8')worksheet = workbook.add_sheet('result')#建立子品類清單items = ['眉筆','口紅','眉粉','眼線筆','睫毛膏','粉餅','唇彩','散粉','眼影','唇釉','腮紅','BB霜','粉底液','卸妝水','隔離霜','面霜','香水']k = -1b = 0 #b是記錄總數(shù)for item in items: a = 0 #a是某個子品類的數(shù)目 array = [] i = -1 k = k+1 for col in cols1: i = i + 1     if (item in col) and ('卡姿蘭' in col): #商品名稱里包含list里面的子品類和卡姿蘭 array.append(i) for n in array: a = a+ cols2[n] print(item) print(a) b = b+a worksheet.write(k,0,item) worksheet.write(k,1,a)worksheet.write(k+1,0,'總數(shù)')worksheet.write(k+1,1,b)workbook.save('result.xls')最后將輸出的結(jié)果做圖展示

案例二介紹??

在一個項(xiàng)目中我們需要對用戶的終端機(jī)器進(jìn)行統(tǒng)計,可是接口傳回的數(shù)據(jù)如下圖,同樣是IPhone卻有上萬種寫法,除了IPhone外,其他的安卓手機(jī)像是華為、OPPO、VIVO、小米等都有類似的情況,現(xiàn)在需要將這些分散的數(shù)據(jù)識別出,并加以統(tǒng)計

流程為:

??? 1、用關(guān)鍵字對表內(nèi)的內(nèi)容進(jìn)行查找,將包含關(guān)鍵字的行記錄。

????2、將包含關(guān)鍵字行第二列的數(shù)據(jù)進(jìn)行加成,并且統(tǒng)計?

????3、輸出到新的文檔里


首先我們需要先制作一個關(guān)鍵字碼表,如下圖,我們將4大安卓機(jī)外的安卓機(jī)合計到安卓里面

接著,用xlrd讀取excel,用碼表內(nèi)的關(guān)鍵字跟第一列的數(shù)據(jù)進(jìn)行匹配,符合匹配的將第二列的數(shù)字加總,最后用xlwt輸出到excel文件里,實(shí)現(xiàn)代碼如下:

import?xlrdimport xlwtreadbook = xlrd.open_workbook(r'phone.xlsx')sheet = readbook.sheet_by_index(0)cols1=sheet.col_values(0)cols2=sheet.col_values(1)i = -1a = 0 #記錄數(shù)目array = []keywords = ['iphone', 'iPhone', '蘋果', 'Iphone', 'iOS']for col in cols1: i = i + 1 for word in keywords: #匹配清單內(nèi)的關(guān)鍵字 if word in col: array.append(i)for n in array: a = a+ cols2[n]print(a)workbook = xlwt.Workbook(encoding='utf-8')worksheet = workbook.add_sheet('test')worksheet.write(1,1,a)workbook.save('phone1.xls')

最后用EXCEL作圖,就可以完成用戶數(shù)據(jù)統(tǒng)計

案例三介紹

封裝一個讀取用例的excel類:用來實(shí)現(xiàn)讀取數(shù)據(jù)和寫入數(shù)據(jù)的功能

cases.xlsx的測試數(shù)據(jù):

1.按行讀取數(shù)據(jù),存儲在列表中

import openpyxlclass Case: #這個類用來存儲用例的 __slots__ = [] #特殊的類屬性,可以用來限制這個類創(chuàng)建的實(shí)例屬性添加 可寫可不寫 passclass ReadExcel(object): #讀取excel數(shù)據(jù)的類 def __init__(self,file_name,sheet_name): """ 這個是用來初始化讀取對象的 :param file_name: 文件名 ---> str類型 :param sheet_name: 表單名 ———> str類型 """ # 打開文件 self.wb = openpyxl.load_workbook(file_name) # 選擇表單 self.sh = self.wb[sheet_name] def read_data_line(self): #按行讀取數(shù)據(jù)轉(zhuǎn)化為列表 rows_data = list(self.sh.rows) # print(rows_data) # 獲取表單的表頭信息 titles = [] for title in rows_data[0]: titles.append(title.value) # print(titles) #定義一個空列表用來存儲測試用例 cases = [] for case in rows_data[1:]: # print(case) data = [] for cell in case: #獲取一條測試用例數(shù)據(jù) # print(cell.value) data.append(cell.value) # print(data) #判斷該單元格是否為字符串,如果是字符串類型則需要使用eval();如果不是字符串類型則不需要使用eval() if isinstance(cell.value,str): data.append(eval(cell.value)) else: data.append(cell.value) #將該條數(shù)據(jù)存放至cases中 # print(dict(list(zip(titles,data)))) case_data = dict(list(zip(titles,data))) cases.append(case_data) return casesif __name__ == '__main__': r = ReadExcel('cases.xlsx','Sheet1') data1 = r.read_data_line() print(data1)

2.按行讀取數(shù)據(jù),存儲在對象中

import openpyxlclass Case: passclass ReadExcel(object): def __init__(self,filename,sheetname): self.wb = openpyxl.load_workbook(filename) self.sh = self.wb[sheetname] def read_data_obj(self): """ 按行讀取數(shù)據(jù) 每條用例存儲在一個對象中 :return: """ rows_data = list(self.sh.rows) # print(rows_data) # 獲取表單的表頭信息 titles = [] for title in rows_data[0]: titles.append(title.value) # print(titles) # 定義一個空列表用來存儲測試用例 cases = [] for case in rows_data[1:]: # print(case) #創(chuàng)建一個Case類的對象,用來保存用例數(shù)據(jù) case_obj = Case() data = [] for cell in case: # 獲取一條測試用例數(shù)據(jù) # print(cell.value) # data.append(cell.value) # print(data) if isinstance(cell.value,str): # 判斷該單元格是否為字符串,如果是字符串類型則需要使用eval();如果不是字符串類型則不需要使用eval() data.append(eval(cell.value)) else: data.append(cell.value) # 將該條數(shù)據(jù)存放至cases中 # print(dict(list(zip(titles,data)))) case_data = list(zip(titles, data)) # print(case_data) for i in case_data: setattr(case_obj,i[0],i[1]) # print(case_obj) # print(case_obj.case_id,case_obj.data,case_obj.excepted) cases.append(case_obj) return casesif __name__ == '__main__': r = ReadExcel('cases.xlsx','Sheet1') res = r.read_data_obj() for i in res: print(i.caseid, i.excepted, i.data)

?3.將測試用例封裝到列表中,讀取指定列的數(shù)據(jù)

import openpyxlclass Case: passclass ReadExcelZy(object): def __init__(self,filename,sheetname): self.wb = openpyxl.load_workbook(filename) self.sheet = self.wb[sheetname] # list1 參數(shù)為一個列表,傳入的是指定讀取數(shù)據(jù)的列,比如[1,2,3] # 每一行[1,3,5]列的數(shù)據(jù),讀取出來就作為一條測試用例,放在字典中 # 所有的用例放在列表中并且進(jìn)行返回 def read_data(self,list1): """ :param list1: list--->要讀取列 list類型 :return: 返回一個列表,每一個元素為一個用例(用例為dict類型) """ # 獲取最大的行數(shù) max_r = self.sheet.max_row cases = [] #定義一個空列表,用來存放所有的用例數(shù)據(jù) titles = [] #定義一個空列表,用來存放表頭 # 遍歷所有的行數(shù)據(jù) for row in range(1,max_r+1): if row != 1: #判斷是否是第一行 case_data = [] #定義一個空列表,用來存放該行的用例數(shù)據(jù) for column in list1: info = self.sheet.cell(row,column).value # print(info) case_data.append(info) # print(list(zip(titles,case_data))) case = dict(zip(titles,case_data)) #將該條數(shù)據(jù)和表頭進(jìn)行打包組合,作用相當(dāng)于dict(list(zip(titles,case_data))) # print(case) cases.append(case) # print(cases) else: #獲取表頭數(shù)據(jù) for column in list1: title = self.sheet.cell(row,column).value titles.append(title) # print(titles) return casesif __name__ == '__main__': r = ReadExcelZy("cases.xlsx","Sheet1") res = r.read_data([1,2,3]) for o in res: print(o['caseid'],o['data'],o['excepted'])

4.將測試用例封裝到對象中,讀取指定列的數(shù)據(jù)

import openpyxlclass Case: passclass ReadExcelZy(object): def __init__(self,filename,sheetname): self.wb = openpyxl.load_workbook(filename) self.sheet = self.wb[sheetname] # list1 參數(shù)為一個列表,傳入的是指定讀取數(shù)據(jù)的列,比如[1,2,3] # 每一行[1,3,5]列的數(shù)據(jù),讀取出來就作為一條測試用例,放在字典中 # 所有的用例放在對象中并且進(jìn)行返回 def read_data_obj(self,list2): max_r1 = self.sheet.max_row #獲取最大行數(shù) cases = [] titles = [] #用來存放表頭數(shù)據(jù) for row in range(1,max_r1+1): if row != 1: case_data = [] for column in list2: info = self.sheet.cell(row,column).value # print(info) case_data.append(info) cases_data = list(zip(titles,case_data)) #將一條用例存到一個對象中(每一列對應(yīng)對象的一個屬性) case_obj = Case() for i in cases_data: # print(i) setattr(case_obj,i[0],i[1]) # print(case_obj.caseid,case_obj.excepted,case_obj.data) cases.append(case_obj) else: for column in list2: title = self.sheet.cell(row,column).value titles.append(title) return casesif __name__ == '__main__': r = ReadExcelZy("cases.xlsx","Sheet1") res = r.read_data_obj([1,2,3]) for i in res: print(i.caseid,i.data,i.excepted)

5.優(yōu)化第4部分代碼,將設(shè)置對象屬性寫在初始化方法中(封裝Excel類讀取數(shù)據(jù)最常用的方法)

import openpyxlclass Case: # 這個類用來存儲用例的 def __init__(self, attrs): """ 初始化用例 :param attrs:zip類型——>[{key,value},(key1,value1)......] """ for i in attrs: setattr(self, i[0], i[1])class ReadExcel(object): def __init__(self, filename, sheetname): """ 定義需要打開的文件及表名 :param filename: 文件名 :param sheetname: 表名 """ self.wb = openpyxl.load_workbook(filename) self.sheet = self.wb[sheetname] def read_data_obj_new(self, list2): # 獲取最大行數(shù) max_r1 = self.sheet.max_row cases = [] # 用來存放表頭數(shù)據(jù) titles = [] for row in range(1, max_r1 + 1): if row != 1: case_data = [] for column in list2: info = self.sheet.cell(row, column).value # print(info) case_data.append(info) case = list(zip(titles, case_data)) # 新建對象時,將對象傳給Case類 case_obj = Case(case) # print(case_obj.caseid,case_obj.excepted,case_obj.data) cases.append(case_obj) else: # 獲取表頭 for column in list2: title = self.sheet.cell(row, column).value titles.append(title) if None in titles: raise ValueError("傳入的表頭的數(shù)據(jù)有顯示為空") return casesif __name__ == '__main__': r = ReadExcel('cases.xlsx', 'Sheet1') res1 = r.read_data_obj_new([1, 2, 3]) for i in res1: print(i.caseid, i.data, i.excepted)

完整流程的代碼

一、將測試數(shù)據(jù)參數(shù)化

import unittestfrom python.register_new.register import registerfrom python.register_new.register_testcase_new import RegisterTestCasefrom HTMLTestRunnerNew import HTMLTestRunnerclass RegisterTestCase(unittest.TestCase): # 初始化測試用例 def __init__(self,modethod_name,excepted,data): # modethod_name 測試用例方法名 super().__init__(modethod_name) # excepted 測試用例的預(yù)期結(jié)果 self.excepted = excepted # data 測試用例參數(shù)值 self.data = data def setUp(self): print("準(zhǔn)備測試環(huán)境,執(zhí)行測試用例之前會執(zhí)行此操作") def tearDown(self): print("還原測試環(huán)境,執(zhí)行完測試用例之后會執(zhí)行此操作") def test_register(self): res = register(*self.data) try: self.assertEquals(self.excepted,res) except AssertionError as e: print("該條測試用例執(zhí)行未通通過") raise e else: print("該條測試用例執(zhí)行通過")# 創(chuàng)建測試套件suite = unittest.TestSuite()# 將測試用例添加至測試套件中case = [{'excepted':'{"code": 1, "msg": "注冊成功"}','data':'('python1', '123456','123456')'}, {'excepted':'{"code": 0, "msg": "兩次密碼不一致"}','data':'('python1', '1234567','123456')'}]for case in cases: suite.addTest(RegisterTestCase('test_register',case['excepted'],case['data']))# 執(zhí)行測試套件,生成測試報告with open("report.html",'wb') as f: runner = HTMLTestRunner( stream = f, verbosity = 2, title = 'python_test_report', description = '這是一份測試報告', tester = 'WL' ) runner.run(suite)

二.將調(diào)用封裝好的Excel類的完整代碼流程

import unittestfrom python.register_new.register import registerfrom python.register_new.register_testcase_new import RegisterTestCasefrom HTMLTestRunnerNew import HTMLTestRunnerfrom python.readexcel import ReadExcelclass RegisterTestCase(unittest.TestCase): # 初始化測試用例 def __init__(self, modethod_name, excepted, data): # modethod_name 測試用例方法名 super().__init__(modethod_name) # excepted 測試用例的預(yù)期結(jié)果 self.excepted = excepted # data 測試用例參數(shù)值 self.data = data def setUp(self): print("準(zhǔn)備測試環(huán)境,執(zhí)行測試用例之前會執(zhí)行此操作") def tearDown(self): print("還原測試環(huán)境,執(zhí)行完測試用例之后會執(zhí)行此操作") def test_register(self): res = register(*self.data) try: self.assertEquals(self.excepted, res) except AssertionError as e: print("該條測試用例執(zhí)行未通通過") raise e else: print("該條測試用例執(zhí)行通過")# 創(chuàng)建測試套件suite = unittest.TestSuite()# 調(diào)用封裝好的讀取數(shù)據(jù)的Excel類,獲取測試數(shù)據(jù)r1 = ReadExcel('cases.xlsx', 'Sheet1')cases = r1.read_data_obj_new([2, 3])# 將測試用例添加至測試套件中for case in cases: # 需要使用eva()函數(shù)對except和data進(jìn)行自動識別 suite.addTest(RegisterTestCase('test_register', eval(case.excepted), eval(case.data)))# 執(zhí)行測試套件,生成測試報告with open("report.html", 'wb') as f: runner = HTMLTestRunner( stream=f, verbosity=2, title='python_test_report', description='這是一份測試報告', tester='WL') runner.run(suite)微信號:lost-fawn新浪微博:青衫已舊伊人猶在-掃碼關(guān)注我們-戳“閱讀原文”我們一起變可愛 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的excel sheet限制_Python 处理Excel内的数据(案例介绍*3)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。