[英]I want to retrieve the data from excel using filter criteria if filter matches then data should be iterated in python?
我想使用過濾條件從 excel 中檢索數據,如果過濾條件匹配,那么數據應該在 python 中迭代。 以下是沒有過濾器的代碼,如果添加過濾器不起作用,任何人都可以幫助我。
任何人都可以使用 python 中的其他框架為我提供解決方案嗎?我需要使用過濾器值獲取行值。
這里我使用 openpyxl
from openpyxl import Workbook, load_workbook
class Util:
def read_data_from_excel(file_name, sheet, filter):
datalist = []
wb = load_workbook(filename=file_name)
sh = wb[sheet]
row_ct = sh.max_row
col_ct = sh.max_column
for i in range(2, row_ct + 1):
row = []
for j in range(1, col_ct + 1):
if (sh.cell(row=i, column=j).value == filter): # if i remove this line it is working
row.append(sh.cell(row=i, column=j).value)
datalist.append(row)
return datalist
#calling like this
from base_testcase import BaseTestCase
from ddt import ddt, data, file_data, unpack
from util.util import Util
@ddt
class GithubTest(BaseTestCase):
@data(*Util.read_data_from_excel("./test_data.xlsx", "LoginData", "github")) # github is my filter
@unpack
def test_notifications(self, username, password):
self.login(username, password)
self.check_notification()
class LoginPage(object):
url = 'http://github.com'
sign_in_link = "a:contains('Sign in')"
username = "[name='login']"
password = "[name='password']"
sign_in = "[value='Sign in']"
from seleniumbase import BaseCase
from login_page import LoginPage
class BaseTestCase(BaseCase):
def login(self, username, password):
self.open(LoginPage.url)
self.click(LoginPage.sign_in_link)
self.type(LoginPage.username, username)
self.type(LoginPage.password, password)
self.click(LoginPage.sign_in)
# My Excel data
username | password | filter_name | #--> from this column filter should be taken
sample | tester | github |
test | user | tester |
如果該行中的一列具有等於filter
的值,我將過濾器更改為獲取整行
這應該可以解決問題:
from openpyxl import Workbook, load_workbook
def read_data_from_excel(file_name, sheet, filter):
datalist = []
wb = load_workbook(filename=file_name)
sh = wb[sheet]
row_ct = sh.max_row
col_ct = sh.max_column
for i in range(2, row_ct + 1):
row = []
for j in range(1, col_ct + 1):
if (sh.cell(row=i, column=j).value == filter): # if i remove this line it is working
datalist.append([col.value for col in sh[i]])
break
datalist.append(row)
return datalist
如果您對代碼有任何疑問,請隨時在評論中問我,如果我的評論對您有幫助,請考慮投票或將其標記為答案:)
我已經在 python 中使用pandas
實現了這一點,它非常簡單
def read_excel_data(file_path, sheet, filter):
df = pd.read_excel(file_path, sheet)
return df[df['filter'] == filter].to_dict('records')
# Here once you got the records then you can iterate and get value you want
login_data = read_excel_data('path to file', sheet_name, filter_varable)
for data in login_data:
print(data['username'])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.