如何在python中获取小ascii文件的内容?

2024-05-19 02:09:23 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我们想要实现一个与PHP的^{}等价的程序。

什么是最佳实践?(优雅可靠)

这里有一些建议,对吗?

使用with语句:

def file_get_contents(filename):
    with file(filename) as f:
        s = f.read()
    return s

使用标准open()是否安全?

def file_get_contents(filename):
    return open(filename).read()

两种解决方案中的文件描述符都会发生什么变化?


Tags: 程序readgetreturndefaswithcontents
3条回答

使用with语句实际上是确保文件真正关闭的最好方法。

取决于此任务的垃圾回收器行为可能会起作用,但在这种情况下,有一种很好的方法可以确保在所有情况下,所以。。。

在当前的CPython实现中,两者通常都会立即关闭文件。然而,Python语言并不能保证第二个文件最终会关闭,但最终的敲定者可能要等到下一个gc周期才会被调用。像Jython和IronPython这样的实现将像这样工作,所以最好明确地关闭文件。

我想说,使用第一个解决方案是最佳实践,尽管open通常比file更受欢迎。请注意,如果您希望第二个示例的简洁性,可以稍微缩短一点:

def file_get_contents(filename):
    with open(filename) as f:
        return f.read()

上下文管理器的__exit__部分将在您将主体留给任何原因时执行,包括异常和从函数返回-不需要使用中间变量。

import os

def file_get_contents(filename):
  if os.path.exists(filename):
    fp = open(filename, "r")
    content = fp.read()
    fp.close()
    return content

在这种情况下,如果文件不存在,它将返回None,并且在我们退出函数之前,文件描述符将被关闭。

相关问题 更多 >

    热门问题