Python Readline - Reads Only First Line
#1 input_file = 'my-textfile.txt' current_file = open(input_file) print current_file.readline() print current_file.readline() #2 input_file = 'my-textfile.txt' print open(input_fi
Solution 1:
When you call open
you are opening the file anew and starting from the first line. Every time you call readline
on an already open file it moves its internal "pointer" to the start of the next line. However, if you re-open the file the "pointer" is also re-initialized - and when you call readline
it reads the first line again.
Imagine that open
returned a file
object that looked like this:
class File(object):
"""Instances of this class are returned by `open` (pretend)"""
def __init__(self, filesystem_handle):
"""Called when the file object is initialized by `open`"""
print "Starting up a new file instance for {file} pointing at position 0.".format(...)
self.position = 0
self.handle = filesystem_handle
def readline(self):
"""Read a line. Terribly naive. Do not use at home"
i = self.position
c = None
line = ""
while c != "\n":
c = self.handle.read_a_byte()
line += c
print "Read line from {p} to {end} ({i} + {p})".format(...)
self.position += i
return line
When you ran your first example you would get something like the following output:
Starting up a new file instance for /my-textfile.txt pointing at position 0.
Read line from 0 to 80 (80 + 0)
Read line from 80 to 160 (80 + 80)
While the output of your second example would look something like this:
Starting up a new file instance for /my-textfile.txt pointing at position 0.
Read line from 0 to 80 (80 + 0)
Starting up a new file instance for /my-textfile.txt pointing at position 0.
Read line from 0 to 80 (80 + 0)
Solution 2:
The second snippet opens the file twice, each time reading one line. Since the file is opened afresh, each time it is the very first line that's getting read.
Post a Comment for "Python Readline - Reads Only First Line"