当前位置: 首页 > 面试题库 >

如何循环直到Python中的EOF?

皇甫鸿远
2023-03-14
问题内容

我需要循环直到碰到类似文件的对象的末尾,但是我没有找到“明显的方法”,这使我怀疑自己正在忽略某些东西,很明显。:-)

我有一个流(在这种情况下,它是一个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的test子句中,但当然不适用于Python。对实现此目标的更好方法有何想法?


问题答案:

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

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


 类似资料:
  • 问题内容: 如果两个模块相互导入会怎样? 为了概括这个问题,Python中的循环导入又如何呢? 问题答案: 导入确实非常简单。只要记住以下几点: 和是可执行语句。它们在运行的程序到达该行时执行。 如果模块不在中,则导入将在中创建新的模块条目,然后在模块中执行代码。在执行完成之前,它不会将控制权返回给调用模块。 如果中确实存在一个模块,则无论导入是否完成执行,导入都会简单地返回该模块。这就是循环导入

  • 问题内容: 我正在谈论做类似的事情: 我可以想到一些在python中执行此操作的方法(使用和来创建和反转它的列表,…),但我想知道是否存在更优雅的方法。在那儿? 编辑:有人建议我使用xrange()而不是range(),因为range返回一个列表,而xrange返回一个迭代器。但是在Python 3(我碰巧使用过)中,range()返回一个迭代器,而xrange不存在。 问题答案: 并采用指定步骤

  • 我一直在寻找如何弄清楚如何让一个输入或某些东西进入一个time循环。就像在,输入()命令不会停止我的秒表。我尝试过tkinter、pygame和其他几种方法,但它们都不起作用。如果有人能帮我,我更喜欢小而简单的东西,如果这是可能的话。具体来说,我想学习做什么,基本上是允许在按下任何键时立即停止(最好不按回车键)。谢谢,马鞍猪! 以下是我到目前为止的情况,没有任何东西可以激活停止:

  • 问题内容: 我知道python中的循环导入问题已经出现过很多次了,我已经阅读了这些讨论。在这些讨论中反复提出的意见是,循环导入表明设计不良,应重新组织代码以避免循环导入。 有人可以告诉我在这种情况下如何避免循环导入吗?:我有两个类,并且我希望每个类都有一个构造函数(方法),该构造函数接受另一个类的实例并返回该类的实例。 更具体地说,一类是可变的,一类是不变的。哈希,比较等需要不可变的类。可变类也需

  • 问题内容: 考虑以下代码片段: 我期望创建一个具有以下两个功能的字典: 但看起来生成的两个函数完全相同: 我真的不明白为什么。你有什么建议吗 ? 问题答案: 你需要为创建的每个函数绑定。一种方法是将其作为具有默认值的参数传递: 现在,函数内部的使用了参数,即使它具有相同的名称,并且在创建函数时会评估该参数的默认值。为了帮助你看到以下内容: 请记住默认值是如何工作的,例如可变对象(如列表和字典)的工

  • 问题内容: 我有该代码: 它可以很好地上传图像,但是问题是我找不到一种逐一上传图像的方法,我试图将 async 选项 设置为false, 但是它冻结了网络浏览器,直到所有图像都被上传为止,这不是我所需要的。想要,我想以某种方式模拟此 “ async:false” 选项以执行相同的操作,但不冻结Web浏览器。 这该怎么做 ? 问题答案: 您可以创建一个Promise数组,以便在所有Promise都解