3

我正在尝试在 cwd 中打开文件“data.txt”并读取行,如果文件不存在,是否有一个单行器(或关闭)退出子例程..我知道有像使用 os.path.exists 和尝试/排除 IO 错误,但对单行或最聪明的方式感兴趣

def readfile ():
    f = open('data.txt')
    lines = f.readlines()
    f.close()
4

2 回答 2

7

你可以使用with打开

with open('data.txt') as f:
    lines = f.readlines()

with 语句将在嵌套代码块之后自动关闭文件。使用 with 语句的优点是,无论嵌套块如何退出,都可以保证关闭文件。如果在块结束之前发生异常,它将在异常被外部异常处理程序捕获之前关闭文件。

如果嵌套块包含 return 语句,或者 continue 或 break 语句,则 with 语句也会在这些情况下自动关闭文件。

于 2012-12-28T03:48:36.657 回答
2

您可以使用os.path.exists条件表达式

import os.path as opath

def readlines(path):
    return open(path).readlines() if opath.exists(path) else []

如果您正在进行惰性评估(它只会读取调用者消耗的行数),请将其与生成器表达式结合起来:

import os.path as opath

def readlines(path):
    try:
        return (l for l in open(path)) if opath.exists(path) else ()
    except FileNotFoundError:
        return ()
于 2012-12-28T04:18:04.587 回答