2016-11-30 81 views
0

我在下面的格式有一個CSV文件中的所有行:Python的方法不返回csv文件

測試用例,旗

測試1,Y

測試2,Y

TEST3, Y

test4,Y

TestCase和Flag是列名稱。

現在爲了閱讀上面的CSV文件中的所有行,我已經寫了下面的代碼:

import csv 
import os 

csv.register_dialect(
    'usercredentials', 
    delimiter=',', 
    quotechar='"', 
    doublequote=True, 
    skipinitialspace=True, 
    lineterminator='\r\n', 
    quoting=csv.QUOTE_MINIMAL 
) 

    def testexecution(): 


     with open('location of above csv file', 'r+') as file: 
      data = csv.DictReader(file, dialect='usercredentials') 
      for row in data: 
       testcase = row['TestCase'] 
       flag = row['Flag'] 
      return testcase, flag 

但這種方法只返回CSV文件的最後一排,而我想這個方法返回所有的行。

請建議。

回答

1

在for循環中,要替換的測試用例和標誌變量的值在每次迭代中,最後你是從最後一行返回值。你可能想使用一個字典或一個列表,在每個迭代中追加這些值,最後返回這些值。

1

您正在重新分配想要返回的變量。只需添加一個清單:

with open('location of above csv file', 'r+') as file: 
     data = csv.DictReader(file, dialect='usercredentials') 
     testcase = [] 
     flag = [] 
     for row in data: 
      testcase.append(row['TestCase']) 
      flag.append(row['Flag']) 
     return testcase, flag 
1

@Navidad20建議使用列表,但這不會將測試用例和標誌值保留在一起,這幾乎肯定意味着您必須將zip這兩個列表放在一起。所以我想,而不是建議:

with open('location of above csv file', 'r+') as file: 
    data = csv.DictReader(file, dialect='usercredentials') 
    result = [] 
    for row in data: 
     result.append((row['TestCase'], row['Flag'])) 
    return result 

這樣,你得到兩個元素的元組的列表回來,讓你寫代碼像

for testcase, flag in testexcution(): 
    ... 

處理對在其他一些方面。