perl to python
Duncan Booth
me at privacy.net
Wed May 12 16:51:48 EDT 2004
Scott Schwartz <"schwartz+ at usenet "@bio.cse.psu.edu> wrote in
news:8gisf1ihvc.fsf at galapagos.bx.psu.edu:
> Duncan Booth <me at privacy.net> writes:
>> import sys
>> for line in sys.stdin:
>> line = line[:-1].split('\t')
>> print "%s %s %s %s" % (line[3], line[2], line[1], line[0])
>
>> While I agree with you that using the appropriate tool is preferred
>> over using Python for everything, I don't really see much to choose
>> between the Python and awk versions here.
>
> 1) Python throws an error if you have less than three fields,
> requiring more typing to get the same effect.
I would rather have the error when the input isn't formatted as expected.
The alternative would be incorrect output.
If you really want to suppress the error then:
line = (line[:-1]+'\t'*3).split('\t')
>
> 2) Python generators on stdin behave strangely. For one thing,
> they're not properly line buffered, so you don't get any lines until
> eof. But then, eof is handled wrongly, and the loop doesn't exit.
True, if you are trying to reformat interactive input. I had assumed that
the use case here was redirecting input from a file, and in that case the
EOF problem isn't an issue. Buffering may or may not be a problem.
>
> 3) There is no efficient RS equivalent, in case you need to read
> paragraphs.
In that case I would write a generator to group the lines. Longer than RS,
but also more flexible.
More information about the Python-list
mailing list