我一直在寻求帮助,因为我已经尝试了许多晚上,但都无济于事。我正在尝试创建一个生成器函数,该函数将从文件返回行中的第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。
谢谢。
答案 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个项目之后停止拆分(您不需要最后一个拆分标记)。