Python 使用Robot Framework读取CSV文件并从第n列中查找值

Python 使用Robot Framework读取CSV文件并从第n列中查找值,python,csv,robotframework,robotframework-ide,Python,Csv,Robotframework,Robotframework Ide,请帮我找到你的答案 使用Robot Framework读取CSV文件并从第n列中查找值 我不想使用excel库 我有一个csv文件,有5列和10000行 想要使用robot framework从第3列和7000行中查找值,我将如何直接查找值 我在下面进行了尝试,获得了一些价值,但循环执行了n次,这很耗时,可能会造成性能问题 ${value1} Create List ${FILE_CONTENT} Get File C:\\abcd1.csv

请帮我找到你的答案 使用Robot Framework读取CSV文件并从第n列中查找值 我不想使用excel库

我有一个csv文件,有5列和10000行 想要使用robot framework从第3列和7000行中查找值,我将如何直接查找值

我在下面进行了尝试,获得了一些价值,但循环执行了n次,这很耗时,可能会造成性能问题

${value1}   Create List             
${FILE_CONTENT} Get File    C:\\abcd1.csv           
Log File Content: ${FILE_CONTENT}               
@{LINES}    Split to Lines  ${FILE_CONTENT}         
Remove From List    ${LINES}    0           
:FOR    ${LINE} IN  @{LINES}        
     Log    ${LINE}         
     @{ROWS}    Split String    ${LINE} separator=, 
     ${VALUE}   Get From List   ${ROWS} 2   
     Log    ${VALUE}            
     ${value2}  Convert To String   ${VALUE}        
     Run Keyword If     ${value2} == 1400000    Exit For Loop       
     Append To List ${value1}   ${value2}           
     Log    ${value1}

首先,我试着按照我给你的建议使用内置库

github.com/s4int/robotframework-CSVLibrary

我遇到了一些错误,这可能是因为我的data.csv的格式,但并没有足够的时间来调试它

我用python为您的解决方案创建了一个自定义库,您可以在工作中使用它

data.csv

Name,Age,region,country,Marks
pankaj,22,delhi,india,45
neeraj,32,noida,india,75
python代码使用csv模块解析此数据,并返回第n行和第n列的值

import csv
#Previous function to go to nth row and nth column
def go_to_nth_row_nth_column(File,row_no,col_no):
    inputFile = File
    row_no=int(row_no)
    col_no=int(col_no)
    with open(inputFile) as ip:
        reader = csv.reader(ip)
        for i, row in enumerate(reader):
            if i == row_no:      # here's the row 
                #print row[col_no] # here's the column
                return row[col_no]

#Function to find the string values, in case of duplicate occurrence as well
def search_cell(File,search_string):
    inputFile = File
    search_position=[]  #empty list which will later store row,column occurences
    with open(inputFile) as ip:
        reader = csv.reader(ip)
        for i, row in enumerate(reader):
            for j, column in enumerate(row):
                if search_string in column:      # here's the row 
                    #print((i,j))
                    search_position.append((i,j)) #this will create list of list i.e. list of row,columns in case of multi occurences
                    #return (i,j)   
    return search_position
您可以在robot文件中将其用作库,如下所示

*** Settings ***
Library    csv2.py



 *** Test Cases ***
Test
    Check row column
    Search String

*** Keywords ***
Check row column
    ${result} =    go_to_nth_row_nth_column    data.csv    2    1
    log  ${result}

Search String
    ${result1}=    search_cell    data.csv    india
    log  ${result1}
我得到的答案是唯一的

['40','第二项','300']
我希望@pankaj建议的两个包含300个的列都使用带有以下代码的库。此代码查找变量
${value_to_find}
,如果找到,则返回,否则继续循环并记录消息。如果要在单个列中查找变量,可以自定义
验证变量
关键字范围/循环

示例机器人

*** Settings ***
Library                     Collections
Library                     CSVLibrary

*** Variables ***
${value_to_find}    Morris

*** Test Cases ***
mytest
    Read file and verify

*** Keywords ***
Read file and verify
  @{list}=  read csv file to list    data.csv
  :FOR    ${x}    IN    @{list}
  \    Log  ${x}
  \    Set test variable    ${x}
  \    verify variable
  \    Run keyword if    ${status}    Log to console    variable was found!
  \    Exit For Loop If    ${status}
  Run keyword if    not ${status}    Log to console    variable was not found!

verify variable
    ${length}=    Get Length    ${x}
  : FOR    ${j}    IN RANGE    0    ${length}
  \    Log    ${x[${j}]}
  \    ${status}=    Evaluate    '${x[${j}]}' == '${value_to_find}'
  \    Log    ${status}
  \    set test variable    ${status}
  \    Exit For Loop If    ${status}
data.csv

id,first_name,last_name,email,gender,ip_address
1,Douglas,Morris,dmorris0@mozilla.org,Male,205.4.212.229
2,Stephanie,Oliver,soliver1@google.com.br,Female,18.101.154.106
3,Russell,Castillo,rcastillo2@shop-pro.jp,Male,255.52.95.46
4,Helen,Reed,hreed3@rambler.ru,Female,167.55.67.109
5,Jesse,Wagner,jwagner4@histats.com,Male,252.37.62.215
6,Ashley,Diaz,adiaz5@wikia.com,Female,79.87.105.139
7,Rachel,Robinson,rrobinson6@blogger.com,Female,132.66.117.101
8,Phillip,Johnston,pjohnston7@disqus.com,Male,70.152.55.21
9,Craig,Burton,cburton8@toplist.cz,Male,73.117.157.82
10,Patrick,Fisher,pfisher9@1und1.de,Male,2.36.191.97

将代码添加到你的问题中并正确设置格式。你能将代码复制并粘贴到问题本身中吗understand@pankajmishra是否请检查您是否检查了RF@pankajmishra中的CSV库,但我如何从第n个单元格中找到值这太棒了,但我试图验证该值,比如说我有值“abc”在一个变量和csv中,某些列中存在相同的值,我想通过查看csv来验证我将如何找到该值。例如:当我们执行ctrl+F并从列中找到我要应用的逻辑值时,请帮助请再次查看我的示例,首先理解它,然后试着按照你的要求实现一些逻辑用合适的fromatting发布你的代码,这很难理解发布的请检查和帮助您的回答帮助,因为我对编码和构建逻辑不熟悉,请再向您请求一件事,请帮助我想搜索固定列中的值,即我将直接提供的列num,并想搜索字符串、数字,我如何获得该值请帮助thanks@pankaj米什拉,请检查以上我得到的,但如果我想要两者,那么该怎么办谢谢
id,first_name,last_name,email,gender,ip_address
1,Douglas,Morris,dmorris0@mozilla.org,Male,205.4.212.229
2,Stephanie,Oliver,soliver1@google.com.br,Female,18.101.154.106
3,Russell,Castillo,rcastillo2@shop-pro.jp,Male,255.52.95.46
4,Helen,Reed,hreed3@rambler.ru,Female,167.55.67.109
5,Jesse,Wagner,jwagner4@histats.com,Male,252.37.62.215
6,Ashley,Diaz,adiaz5@wikia.com,Female,79.87.105.139
7,Rachel,Robinson,rrobinson6@blogger.com,Female,132.66.117.101
8,Phillip,Johnston,pjohnston7@disqus.com,Male,70.152.55.21
9,Craig,Burton,cburton8@toplist.cz,Male,73.117.157.82
10,Patrick,Fisher,pfisher9@1und1.de,Male,2.36.191.97