Reading a file and resuming reading.

K

Karim Ali

Hi,

Simple question. Is it possible in python to write code of the type:

-----------------------------
while not eof <- really want the EOF and not just an empty line!
readline by line
end while;
-----------------------------

What I am using now is the implicit for loop after a readlines(). I don't
like this at all as a matter of opinion (my background is C++).

But also, in case for one reason or another the program crashes, I want to
be able to rexecute it and for it to resume reading from the same position
as it left. If a while loop like the one above can be implemented I can do
this simply by counting the lines!

I appreciate any help.

Karim

_________________________________________________________________
Windows Live Hotmail. Now with better security, storage and features.
www.newhotmail.ca?icid=WLHMENCA149
 
M

Marc 'BlackJack' Rintsch

Karim Ali said:
Simple question. Is it possible in python to write code of the type:

-----------------------------
while not eof <- really want the EOF and not just an empty line!
readline by line
end while;
-----------------------------

while True:
line = f.readline()
if not line:
break
# Do something with `line`.
What I am using now is the implicit for loop after a readlines(). I don't
like this at all as a matter of opinion (my background is C++).

Both look ugly to Pythonistas too. Files are iterable:

for line in f:
# Do something with `line`.
But also, in case for one reason or another the program crashes, I want to
be able to rexecute it and for it to resume reading from the same position
as it left. If a while loop like the one above can be implemented I can do
this simply by counting the lines!

for line_nr, line in enumerate(f):
# Do something with `line_nr` and `line`.

Ciao,
Marc 'BlackJack' Rintsch
 
H

Hrvoje Niksic

Karim Ali said:
-----------------------------
while not eof <- really want the EOF and not just an empty line!
readline by line
end while;
-----------------------------

for line in open_file:
...

It will stop on EOF, not on empty line.
But also, in case for one reason or another the program crashes, I
want to be able to rexecute it and for it to resume reading from the
same position as it left. If a while loop like the one above can be
implemented I can do this simply by counting the lines!

If you open the file in binary mode, you can easily keep track of the
position in file:

bytepos = 0
with file(filename) as f:
for line in f:
... process line ...
bytepos += len(line)

If you need to restart the operation, simply seek to the previously
known position:

# restart with old bytyepos
with file(filename) as f:
f.seek(bytepos)
for line in f:
... process line ...
bytepos += len(line)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top