iter()是否有多​​个哨兵值?

时间:2020-09-24 23:55:07

标签: python

我正在尝试通过列表推导从文件中获取行,直到到达具有'0'的行,就像这样:

with open('input.txt', 'r') as file:
    lines = [line.strip() for line in iter(file.readline, '0')]

问题在于'0'可能不在最后一行,在这种情况下,它实际上是'0 \ n'。我知道我能做到

for line in file:
    line = line.strip()
    if line == '0':
        break
    else:
        lines.append(line)

但是那太可怕了,我几乎忍不住看它。我是戏剧女王吗?有没有办法将“ 0”和“ 0 \ n”都用作哨兵值,或者在哨兵值检查之前在iter()内剥离读取行?

1 个答案:

答案 0 :(得分:0)

您可以尝试:

with open('input.txt', 'r') as file:
    lines = [line for line in iter(lambda: str.strip(file.readline()), '0')]

但是我不喜欢它...