【问题标题】:How to check for end of file in a recursive function? [duplicate]如何在递归函数中检查文件结尾? [复制]
【发布时间】:2019-09-09 00:57:22
【问题描述】:

我想实现一个递归函数,它将文件作为输入并处理行。当满足条件或我在文件末尾时,递归停止。

问题是我找不到检查我是否在文件末尾的方法。

例如,如果您到达文件末尾,以下代码将不会停止寻找线路会议condition

def f_rec(file):
    line=file.readline()
    if not condition(line): # or file end
        return f_rec(file)
    else:
        return line

我很高兴使用文件对象以外的其他数据结构,但它必须懒惰地读取文件。我不想使用 for 循环,因为我喜欢函数式编程。我的文件中可能有空行。

编辑:

澄清一下:

这不是任何询问如何检查您是否在文件末尾的问题的重复。我很清楚你可以这样做:

for line in file:
   if condition(line):
      return line

我真正想知道的是,是否有一种方法可以将递归函数应用于文件,而文件仍然被延迟读取。

【问题讨论】:

  • 如果你不使用递归,你会怎么做?
  • 抱歉没收到问题?我会使用 for 循环,但正如我所说,我不想这样做(不是因为它是一个学者练习,而是因为我想用递归来实现它的实际算法更简洁)
  • 只循环文件对象:for line info file: 不要使用递归。在 Python 中效率特别低,在开始请求堆栈溢出之前,您只能获得大约 1000 的深度
  • @geckos 答案是正确的。您必须检查行中的空字符串才能知道您已达到 EOF
  • 公平地说,没有答案实际上是递归读取文件中的行,但效率可能很低。

标签: python functional-programming


【解决方案1】:

.readline() 到达文件末尾时将返回一个空字符串,空字符串为 false,因此可以正常工作

def f_rec(file):
    line=file.readline()
    if line:
        return f_rec(file)
    else:
        return line

【讨论】:

  • 抱歉,我忘了说明我的文件中可能有空行。更新问题
  • 我明白了,所以还有其他选择:stackoverflow.com/questions/10140281/…
  • @user160908 “空行”仍然会有一个'\n',所以它们不会是空的
  • 我很惊讶python没有.iseof()
  • Python 有一种非常合理的方法来简单地遍历文件的行,如果失败了,则保证只有在 EOF 时才会从文件对象返回空字符串
猜你喜欢
  • 2020-01-25
  • 1970-01-01
  • 1970-01-01
  • 2019-09-14
  • 2018-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
相关资源
最近更新 更多