从循环返回元素,一次一个

2024-04-25 22:11:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的函数来解析.csv,如下所示

def grabber3(datafile):

with open(datafile, 'rb') as f:
    r =csv.DictReader(f)
    for line in r:
        del line['thisthing']
        print line

这样就可以正确地打印出每条dict行,大约50行,例如

{'NetworkStatus': '1', 'ID': '1469'}
{'NetworkStatus': '1', 'ID': '1470'}
etc etc

但是,我想在调用函数时返回这个值,所以我将print语句改为

def grabber3(datafile):

with open(datafile, 'rb') as f:
    r =csv.DictReader(f)
    for line in r:
        del line['thisthing']
    return line

但它只返回第一行

{'NetworkStatus': '1', 'ID': '1469'}

如何返回循环的每一行/所有dict行,而不是只返回第一行?你知道吗


Tags: csvinidfordefaswithline
1条回答
网友
1楼 · 发布于 2024-04-25 22:11:36

一种有效的方法是使用yield

def grabber3(datafile):
    with open(datafile, 'rb') as f:
        r =csv.DictReader(f)
        for line in r:
            del line['thisthing']
            yield line

然后在调用此函数的代码中,可以执行以下操作:

dict_generator = grabber3(a_file)

然后遍历这个dict_generator,如下所示:

for a_dict in dict_generator:
    print a_dict

有关yield和生成器的更多信息,请参见:

  1. https://wiki.python.org/moin/Generators
  2. What does the "yield" keyword do in Python?

相关问题 更多 >