簡體   English   中英

我想使用過濾條件從 excel 中檢索數據,如果過濾條件匹配,那么數據應該在 python 中迭代嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM