我有以下格式的csv文件:
测试用例,标志
TEST1,Y
TEST2,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文件的最后一行,而我希望这个方法返回所有的行。
请建议。
答案 0 :(得分: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 :(得分:1)
在for循环中,您将在每次迭代中替换testcase的值并标记变量,最后返回最后一行的值。您可能希望使用dict或列表在每次迭代中附加这些值,最后返回这些值。
答案 2 :(得分:1)
@ Navidad20建议使用列表,但这并不能将testcase和flag值保持在一起,这几乎肯定意味着以后你必须将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():
...
在其他一些环境中处理对。