superpollo wrote:
> hi clp
>
> what's the difference between:
>
> while True:
> input_line = sys.stdin.readline()
> if input_line:
> sys.stdout.write(input_line.upper())
> else:
> break
>
> and:
>
>
> while True:
> try:
> sys.stdout.write(sys.stdin.next().upper())
> except StopIteration:
> break
You should write the latter as
for line in sys.stdin:
sys.stdout.write(line.upper())
or
sys.stdout.writelines(line.upper() for line in sys.stdin)
You seem to know already that next() and readline() use different ways to
signal "I'm done with the file". Also, after the first StopIteration
subsequent next() calls are guaranteed to raise a StopIteration. But the
main difference is that file.next() uses an internal buffer, file.readline()
doesn't. That means you would lose data if you tried to replace the
readline() call below with next()
first_line = f.readline()
read_of_the_file = f.read()
In newer Python versions you will get a ValueError when mixing next() and
read()/readline() but in older Pythons (before 2.5 I think) you are in for a
surprise.
As
for line in file: ...
is both the fastest and most readable approach if you want to access a file
one line at a time I recommend that you use it unless there is a specific
reason not to.
Peter
--
http://mail.python.org/mailman/listinfo/python-list