If you want that warm and fuzzy feeling just go with with.
For python 3.6 I ran these two programs under a fresh start of IDLE, giving runtimes of:
0.002000093460083008 Test A 0.0020003318786621094 Test B: with guaranteed close
So not much of a difference.
#--------*---------*---------*---------*---------*---------*---------*---------* # Desc: Test A for reading a text file line-by-line into a list #--------*---------*---------*---------*---------*---------*---------*---------* import sys import time # # MAINLINE if __name__ == '__main__': print("OK, starting program...") inTextFile = '/Users/Mike/Desktop/garbage.txt' # # Test: A: no 'with; c=[] start_time = time.time() c = open(inTextFile).read().splitlines() print("--- %s seconds ---" % (time.time() - start_time)) print("OK, program execution has ended.") sys.exit() # END MAINLINE
OUTPUT:
OK, starting program... --- 0.002000093460083008 seconds --- OK, program execution has ended. #--------*---------*---------*---------*---------*---------*---------*---------* # Desc: Test B for reading a text file line-by-line into a list #--------*---------*---------*---------*---------*---------*---------*---------* import sys import time # # MAINLINE if __name__ == '__main__': print("OK, starting program...") inTextFile = '/Users/Mike/Desktop/garbage.txt' # # Test: B: using 'with' c=[] start_time = time.time() with open(inTextFile) as D: c = D.read().splitlines() print("--- %s seconds ---" % (time.time() - start_time)) print("OK, program execution has ended.") sys.exit() # END MAINLINE
OUTPUT:
OK, starting program... --- 0.0020003318786621094 seconds --- OK, program execution has ended.
contents = os.readfile(path). If I wanted to do something fancier, then ok, I'd happily usewith open(path) as fd: contents = fd.read(). Of course one can write its own wrapper, but that's what the core is for, to provide the useful to abstractions to programmers.