【问题标题】:CSV file reading and find the value from nth Column using Robot FrameworkCSV 文件读取并使用 Robot Framework 从第 n 列中查找值
【发布时间】:2018-06-13 21:42:16
【问题描述】:

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

我有 5 列和 10000 行的 csv 文件 想使用机器人框架从第 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}

【问题讨论】:

  • 将代码添加到您的问题中并正确格式化。
  • 你能把你的代码格式化并粘贴到有问题的地方吗,它很难理解
  • @pankajmishra 请检查
  • 您是否检查了 RF github.com/s4int/robotframework-CSVLibrary/blob/master/… 中的 CSV 库
  • @pankajmishra 但我将如何从第 n 个单元格中找到值

标签: python csv robotframework robotframework-ide


【解决方案1】:

首先,我尝试使用我向您建议的内置库

github.com/s4int/robotframework-CSVLibrary

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

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

数据.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

您可以将其用作机器人文件中的库,如下所示

*** 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}

【讨论】:

  • 这太棒了,但我试图验证这个值,比如说我在一个变量中有值“abc”,而在 csv 中,某些列中存在相同的值,我想通过查看它来验证csv 我将如何找到例如:当我们执行 ctrl+F 并从我想要应用的逻辑的列中找到值时,请帮助
  • 请再看一遍我的例子,先理解它,然后根据您的要求尝试实现一些逻辑
  • 用正确的格式发布你的代码,这很难理解
  • 已发布请查收并帮忙
  • 嗨,您的回答很有帮助,因为我是编码和构建逻辑的新手,会要求您再做一件事,请帮助我想搜索固定列中的值,即列 num 我将直接提供并想搜索字符串,数字我怎么能得到请帮忙谢谢
【解决方案2】:

正如@pankaj 所建议的,使用库https://github.com/s4int/robotframework-CSVLibrary 和以下代码。此代码查找变量${value_to_find},如果找到则返回,否则继续循环并记录消息。 verify variable关键字范围/循环如果想在单个列中找到,可以自定义。

sample.robot

*** 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

【讨论】:

    【解决方案3】:
          ID, Text, Value
          20, Second Item, 200
          30, Third Item, 100
          40, Second Item, 300
          10, First Item, 300
          50, Third Item, 100
    
          import csv
        def search_cell(string):
        with open("C:\\abcd.csv", "rt") as f:
        csvreader = csv.reader(f)
        for index,row in enumerate(csvreader):
            if string in row[2]:
                print "300 spotted"
                return row
    
          Robot Code
          ${result2}    search_cell 300
         Log    ${result2}  
    

    我只得到答案

    ['40', '第二项', '300'] 我想要两列都有 300

    【讨论】:

    • @pankaj mishra,请检查上面我得到的但如果我想要两者,那么该怎么做谢谢
    猜你喜欢
    • 1970-01-01
    • 2019-10-04
    • 2016-08-06
    • 2014-08-12
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多