with open("hello.txt") as f:
for line in f:
- print line
+ print line,
In older versions of Python, you would have needed to do this to get the same
effect::
f = open("hello.txt")
try:
for line in f:
- print line
+ print line,
finally:
f.close()
A file object is its own iterator, for example ``iter(f)`` returns *f* (unless
*f* is closed). When a file is used as an iterator, typically in a
- :keyword:`for` loop (for example, ``for line in f: print line``), the
+ :keyword:`for` loop (for example, ``for line in f: print line.strip()``), the
:meth:`~file.next` method is called repeatedly. This method returns the next input
line, or raises :exc:`StopIteration` when EOF is hit when the file is open for
reading (behavior is undefined when the file is open for writing). In order to
for char in "123":
print char
for line in open("myfile.txt"):
- print line
+ print line,
This style of access is clear, concise, and convenient. The use of iterators
pervades and unifies Python. Behind the scenes, the :keyword:`for` statement
and print its contents to the screen. ::
for line in open("myfile.txt"):
- print line
+ print line,
The problem with this code is that it leaves the file open for an indeterminate
amount of time after the code has finished executing. This is not an issue in
with open("myfile.txt") as f:
for line in f:
- print line
+ print line,
After the statement is executed, the file *f* is always closed, even if a
problem was encountered while processing the lines. Other objects which provide