我想在main.py中有一个循环,它调用一个模块,该模块将打开一个文件并从文件中返回一行,然后我想在主代码中的这一行上执行逻辑,然后向模块请求下一行。在这一点上,我的代码反复返回同一行,直到EOF,我不知道如何修复。你知道吗
主代码:
fwname = input('Please enter the file name (case sensitive): ')
readline = HexFileParser.ParseHex(fwname)
for line in readline:
#perform some logic
print (readline)
模块(HexFileParser):
def ParseHex(filelocation):
fwfile = open("C:\\Path\\"+filelocation,'r')
line = fwfile.readline()
endstring = ":00000001FF"
for line in fwfile:
if line.find(endstring) == -1:
return line.lstrip(':')
else:
break
谢谢你!你知道吗
我想你要的是一个generator function.*
如前所述,
ParseHex
函数将return
不包含endstring
的第一行。在那之后,它就完成了,并且不会做任何其他事情(除非你再次调用它)。你知道吗但是如果将
return
更改为yield
,则函数将返回一个生成器。并且,当您在该生成器上迭代时,您将得到它yield
的所有值,直到它完成为止。你知道吗举个简单的例子:
这将返回一个字符串
"0 servings of spam"
。因为字符串碰巧是可iterable的(您得到的是单个字符),下面的代码将在一行上打印0
,在下一行上打印一个空格,在下一行上打印一个s
,依此类推。你知道吗但有一点变化:
现在返回10个字符串的迭代器。因此,运行以下代码将打印
0 servings of spam
、1 servings of spam
,依此类推。你知道吗关于生成器的更多信息on the wiki,关于生成器的David Beazley's presentations绝对值得一读。你知道吗
*如果我猜对了,你自己想出这个主意真是太好了。说真的,大多数人直到接触了大量的示例之后才意识到生成器有多有用;你发现它们会很有用,只是在试图弄清楚它们的名称和如何用Python编写时遇到了困难。你知道吗
相关问题 更多 >
编程相关推荐