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

vaa*_*aab 36 python file

假设我们想要实现PHP的等价物file_get_content.

什么是最佳做法?(优雅可靠)

这是一些命题,它们是否正确?

使用with声明:

def file_get_contents(filename):
    with file(filename) as f:
        s = f.read()
    return s
Run Code Online (Sandbox Code Playgroud)

使用标准open()安全?

def file_get_contents(filename):
    return open(filename).read()
Run Code Online (Sandbox Code Playgroud)

在任一解决方案中文件描述符会发生什么

Bri*_*ian 49

在CPython的当前实现中,两者通常会立即关闭该文件.但是,Python语言对第二个语言没有这样的保证 - 文件最终将被关闭,但是终结器可能在下一个gc循环之前不会被调用.像Jython和IronPython这样的实现会像这样工作,因此明确关闭文件是一种很好的做法.

我说使用第一种解决方案是最好的做法,尽管open通常是首选file.请注意,如果您更喜欢第二个示例的简洁,您可以稍微缩短一下:

def file_get_contents(filename):
    with open(filename) as f:
        return f.read()
Run Code Online (Sandbox Code Playgroud)

__exit__当您因任何原因离开正文时,上下文管理器的部分将执行,包括异常并从函数返回 - 不需要使用中间变量.