繁体   English   中英

Python 2.7:“ AttributeError:'callable-iterator'对象没有属性'group'”(生成器表达式内的正则表达式查找器)

[英]Python 2.7: “AttributeError: 'callable-iterator' object has no attribute 'group' ” (regex finditer within generator expression)

我正在编写一个包含以下生成器表达式的程序(您可能会猜到,'sep2'是一个已编译的正则表达式):

(chunk.group(1).strip(punctuation) for chunk in sep2.finditer(textString))

这很好。 但是,在我看来,如果通过逐行处理文件而不是使用大字符串,则该程序将具有更大的可伸缩性。 所以我尝试了以下方法:

(chunk.group(1).strip(punctuation) for chunk in (sep2.finditer(line) for line in file))

不幸的是,这将引发以下错误消息:

AttributeError: 'callable-iterator' object has no attribute 'group'

现在,我可以放弃逐行处理文件的想法-老实说,这没什么大不了的。 但是我很想知道这里出了什么问题。 我已经在stackoverflow(以及Python网站,以及整个互联网)中搜索了上述错误消息,但没有发现任何与之相关的信息。 我认为我需要知道的是如何从内部生成器表达式正在产生的“可调用迭代器”对象中获取匹配对象。 但是,我可能会感到困惑。 我不是一个程序员(只是觉得编程有用的人)!

谢谢你的时间。

您已经添加了一些额外的东西来进行迭代,但是还没有添加额外的迭代来处理数据。 因此,编写用于处理一系列块的代码正在接收一系列块的序列(每行一个)。

该代码应更像:

from itertools import chain

(chunk.group(1).strip(punctuation) 
 for chunk in chain.from_iterable(sep2.finditer(line) for line in file))

或(在此嵌套级别,更明确地讲起来更有意义-很难在“多行代码”代码中看到问题,但在这里它是“自动”工作的,因为避免了创建嵌套生成器):

for line in file:
    for chunk in sep2.finditer(line):
        yield chunk.group(1).strip(punctuation)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM