By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
443,660 Members | 1,102 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 443,660 IT Pros & Developers. It's quick & easy.

Reading a file and resuming reading.

P: n/a
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

May 25 '07 #1
Share this Question
Share on Google+
2 Replies


P: n/a
In <ma***************************************@python. org>, Karim Ali
wrote:
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
May 25 '07 #2

P: n/a
"Karim Ali" <ka****@hotmail.comwrites:
-----------------------------
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)
May 25 '07 #3

This discussion thread is closed

Replies have been disabled for this discussion.