In Python, how can I open a file and read it on one line, and still be able to close the file afterwards?
python
Solution
The preferred way to work with resources in python is to use context managers:
with open(infile) as fp:
indata = fp.read()
The `with` statement takes care of closing the resource and cleaning up.
You could write that on one line if you want:
with open(infile) as fp: indata = fp.read()
however, this is considered bad style in python.
You can also open multiple files in a `with` block:
with open(input, 'r') as infile, open(output, 'w') as outfile:
# use infile, outfile
Funny enough, I asked exactly the same question back when I started learning python.
Problem
While working through this exercise I ran into a problem. ``` from sys import argv from os.path import exists script, from_file, to_file = argv print "Copying from %s to %s" % (from_file, to_file) # we could do these two on one line too, how? input = open(from_file) indata = input.read() print "The input file is %d bytes long" % len(indata) print "Does the output file exist? %r" % exists(to_file) print "Ready, hit RETURN to continue, CTRL-C to abort." raw_input() output = open(to_file, 'w') output.write(indata) print "Alright, all done." output.close() input.close() ``` The line `# we could do these two on one line too, how?` is what’s confusing me. The only answer I could come up with was: ``` indata = open(from_file).read() ``` This performed the way I wanted to, but it requires me to remove: ``` input.close() ``` as the input variable no longer exists. How then, can I perform this close operation? How would you solve this?