2016-11-21 33 views
1

我做了這個代碼在python:Robot Framework:如何讀取csv文件中的隨機行並使用這些值?

import csv 

import random 

class RandomRowFromCsv (object): 

    ROBOT_LIBRARY_SCOPE = 'Global' 

    def __init__(self): 
      print 'Read Random Cell Value in CSV File' 

    def read_random_row(self,filename): 
      csv_userinfo=[] 
      auserinfo={} 
      with open(filename,'rb') as csvfile: 
        reader=csv.DictReader(csvfile) 

        csv_userinfo=list(reader) 

        lengthofcsv=len(csv_userinfo) 
        position=random.randrange(1,lengthofcsv) 

        auserinfo=RandomRowFromCsv(*csv_userinfo[position]) 

        return auserinfo.username 
        return auserinfo.password 

但我不能得到的值,並在機器人框架的腳本,讓他們的價值觀,有人能幫助我嗎?

+0

你會收到錯誤信息嗎?顯示有問題的完整錯誤消息(Traceback)。你可以用'RandomRowFromCsv(argument)'作爲參數,但是你不需要參數就可以聲明'__init __(self)'。你如何執行'read_random_row()'? (返回auserinfo.password') – furas

+0

AttributeError:'list'對象沒有屬性'username'@furas – andrembg

+0

顯示完整的錯誤信息(Traceback)。看到「完整」和「有問題」的詞語! – furas

回答

0

此行是錯誤的:

auserinfo = RandomRowFromCsv(*csv_userinfo[position]) 

您正在創建一個新的RandomRowFromCsv對象(循環引用),這一)你不需要,和B)的class'es構造不接受論據(如果a)不適用)。

正如你已經解析csv文件,並把它在userinfo列表那行,你只需要指定排至auserinfo

auserinfo = csv_userinfo[position] 

現在auserinfo是一個字典;要獲取名稱&的密碼,您應該使用aserinfo['username'](其中「username」是csv列名稱)。點符號不起作用 - 它用於對象屬性,在這裏不是這種情況。

,並同時返回兩者返回它們作爲一個元組 - 改變最後兩行:

return aserinfo['username'], aserinfo['password'] 

最後,你有一個小邏輯流程 - 由於1

position = random.randrange(1, lengthofcsv) 

,第一行永遠不會被選中 - position將永遠不會有值0,這是第1行的索引;因此最好將randrange參數更改爲0

相關問題