Чтение CSV-файла и поиск значения из n-го столбца с использованием Robot Framework

Пожалуйста, помогите мне найти ответ для чтения файла CSV и найти значение из n-й колонки, используя Robot Framework. Я не хочу использовать Excel-библиотеку.

У меня есть CSV-файл с 5 столбцами и 10000 строк хотел найти значение из 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}               

3 ответа

Решение

Во-первых, я попытался с помощью встроенной библиотеки, как я предложил вам

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

вы можете использовать это как библиотеку в вашем файле робота, как показано ниже

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

По предложению @pankaj используйте библиотеку https://github.com/s4int/robotframework-CSVLibrary со следующим кодом. Этот код ищет переменную ${value_to_find}, возвращает, если найдено, иначе продолжает цикл и записывает сообщение в журнал. Вы можете настроить verify variable ключевое слово range / loop, если хотите найти его в одном столбце.

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
      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', ' Second Item', ' 300'] я хочу оба столбца с 300

Другие вопросы по тегам