python - 如何在 Python 中循环直到 EOF?

标签 python eof stringio

我需要循环直到我到达一个类似文件的对象的末尾,但我没有找到“显而易见的方法”,这让我怀疑我忽略了一些东西,嗯,很明显。 :-)

我有一个流(在本例中,它是一个 StringIO 对象,但我也对一般情况很好奇)以“”格式存储未知数量的记录,例如:

data = StringIO("\x07\x00\x00\x00foobar\x00\x04\x00\x00\x00baz\x00")

现在,我能想到的唯一清晰的阅读方式是使用(我认为是)初始化循环,这似乎有点不符合 Python 风格:

len_name = data.read(4)

while len_name != "":
    len_name = struct.unpack("<I", len_name)[0]
    names.append(data.read(len_name))

    len_name = data.read(4)

在类 C 语言中,我只是将 read(4) 粘贴在 while 的测试子句中,但这当然行不通对于 Python。关于实现此目的的更好方法有什么想法吗?

最佳答案

您可以通过 iter() 组合迭代与哨兵:

for block in iter(lambda: file_obj.read(4), ""):
  use(block)

关于python - 如何在 Python 中循环直到 EOF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1752107/

相关文章:

python - 南迁移期间 Django GenericRelation 字段不可用

C - 读取 scanf 直到 feof(stdin),不输出错误

c - 如何从管道正确读取和写入

python - 如何修复 "ImportError: cannot import name ' StringIO'"

python - 使用 Pandas Excelwriter 写入 StringIO 对象?

python - Pytest 标记 : mark entire directory/package

python - Coin Flip Streaks Challenge - Al Sweigart 用 python 自动化无聊的东西

python - 具有 Ctypes 的独立 CDLL 库实例

c++ - 在 Linux 中读取 double 时如何测试行尾