使用生成器函数返回行中的第n个字

时间:2019-03-01 07:05:03

标签: python python-3.x

我一直在寻求帮助,因为我已经尝试了许多晚上,但都无济于事。我正在尝试创建一个生成器函数,该函数将从文件返回行中的第n个单词。对于此示例,我将寻找第三个单词。我在下面都尝试过:

def nth_of_each_line(mypath):
    with open (mypath, 'r') as my_file:
        for line in my_file:
            line = line.strip()
            word = line.split()[3]
            yield word

def nth_of_each_line(mypath):
    with open (mypath, 'r') as my_file:
        for line in my_file:
            line = line.strip()
            word = line.split()
            yield word[3]

mypath = 'Test.txt'
for x in nth_of_each_line(mypath):
    print(x)

我收到列表索引超出范围,我尝试将收益线移到其他位置。我不确定自己在做什么错。另外,如果该行很短(有2个单词,但我们正在寻找第三个单词),它将返回默认值None。

谢谢。

1 个答案:

答案 0 :(得分:1)

仅保护访问权限以在行太短时返回None(添加参数以使函数通用):

def nth_of_each_line(mypath,n):
    with open (mypath, 'r') as my_file:
        for line in my_file:
            word = line.split()   # no need for strip as split discards end of line already
            yield word[n] if len(word)>n else None

请注意,列表的索引为零,因此使用n=3返回第4个字。

您可以使用word = line.split(None,n)进行一些优化,以在第n个项目之后停止拆分(您不需要最后一个拆分标记)。