发出调用模块以使用python3从文件中读取行

2024-10-02 20:36:39 发布

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

我想在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

谢谢你!你知道吗


Tags: 模块文件代码inpyforreadlinemain
1条回答
网友
1楼 · 发布于 2024-10-02 20:36:39

我想你要的是一个generator function.*

如前所述,ParseHex函数将return不包含endstring的第一行。在那之后,它就完成了,并且不会做任何其他事情(除非你再次调用它)。你知道吗

但是如果将return更改为yield,则函数将返回一个生成器。并且,当您在该生成器上迭代时,您将得到它yield的所有值,直到它完成为止。你知道吗

举个简单的例子:

>>> def spam():
...     for i in range(10):
...         return '{} servings of spam'.format(i)

这将返回一个字符串"0 servings of spam"。因为字符串碰巧是可iterable的(您得到的是单个字符),下面的代码将在一行上打印0,在下一行上打印一个空格,在下一行上打印一个s,依此类推。你知道吗

>>> for i in spam():
...     print(i)

但有一点变化:

>>> def spam():
...     for i in range(10):
...         yield '{} servings of spam'.format(i)

现在返回10个字符串的迭代器。因此,运行以下代码将打印0 servings of spam1 servings of spam,依此类推。你知道吗

>>> for i in spam():
...     print(i)

关于生成器的更多信息on the wiki,关于生成器的David Beazley's presentations绝对值得一读。你知道吗


*如果我猜对了,你自己想出这个主意真是太好了。说真的,大多数人直到接触了大量的示例之后才意识到生成器有多有用;你发现它们会很有用,只是在试图弄清楚它们的名称和如何用Python编写时遇到了困难。你知道吗

相关问题 更多 >