【问题标题】:How do you make python keep reading lines until a condition is met? [duplicate]你如何让python继续阅读行直到满足条件? [复制]
【发布时间】:2016-11-02 20:49:48
【问题描述】:

这是我当前的代码:

StockSearch = input("Search For Product (Name Or Code):\n")
with io.open('/home/jake/Projects/Stock','r', encoding='utf8') as f:
    for line in f:
        Read = f.readline()
        while Read!='':
            if StockSearch == Read:      
                print (Read)

我试图让 python 继续读取文件的每一行,直到没有剩余的行,并将用户的输入与其中一行匹配,如果没有,它将打印错误代码。

提前谢谢你。

【问题讨论】:

标签: python


【解决方案1】:

您可以遍历打开的文件以逐行读取。如果满足条件,break 退出循环。在打印错误消息的循环末尾添加 else 语句。 else 块只有在读取整个文件但没有找到匹配项时才会执行。

search_text = input("Search For Product (Name Or Code):\n")
with io.open('/home/jake/Projects/Stock','r', encoding='utf8') as f:
    for line in f:
        if search_text == line.strip():
            print line
            break
    else:
        print 'Search text not found'

【讨论】:

    【解决方案2】:

    这似乎类似于我在 Raymond Hettinger 的 'Pythonic' coding video 上看到的模式。它被称为iterating with a sentinel value

    格式如下:

    with open('filename.txt') as f:
        blocks = []
        read_block = partial(f.read, 32)
        for block in iter(read_block, ''):
            blocks.append(block)
    

    在您的情况下,您可以将 '' 替换为您的停止值。

    【讨论】:

    • 您可能需要f.readline() 而不是f.read(32),因为用户正在尝试匹配整行,而不是 32 字节增量。你还必须去掉换行符,所以read_block = lambda: f.readline().strip()
    【解决方案3】:
    StockSearch = input("Search For Product (Name Or Code):\n")
    found = False
    with io.open('/home/jake/Projects/Stock','r', encoding='utf8') as f:
        for line in f:
            line = line.rstrip('\n')
            if StockSearch == line:      
                print(line)
                found = True
                break
    if not found:
        print("Nothing found")
    

    【讨论】:

    • 是的,感谢您指出这一点
    猜你喜欢
    • 2019-12-23
    • 2021-11-26
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 2021-12-24
    • 2020-12-18
    • 1970-01-01
    • 2017-02-03
    相关资源
    最近更新 更多