Python方法没有返回csv文件的所有行

时间:2016-11-30 18:03:20

标签: python

我有以下格式的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文件的最后一行,而我希望这个方法返回所有的行。

请建议。

3 个答案:

答案 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():
    ...

在其他一些环境中处理对。