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

You can use os.path.exists and a conditional expression:

import os.path as opath

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

And if you're into lazy evaluation (it will only read as many lines as the caller consumes), combine it with a generator expression:

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 に答える