Python dos2unix one liner

Peter Otten __peter__ at web.de
Sat Feb 27 06:05:01 EST 2010


@ Rocteur CC wrote:

> But then I found
> http://wiki.python.org/moin/Powerful%20Python%20One-Liners
>   and tried this:
> 
> cat file.dos | python -c "import sys,re;
> [sys.stdout.write(re.compile('\r\n').sub('\n', line)) for line in
> sys.stdin]" >file.unix
> 
> And it works..

- Don't build list comprehensions just to throw them away, use a for-loop 
instead.

- You can often use string methods instead of regular expressions. In this 
case line.replace("\r\n", "\n").

> But it is long and just like sed does not do it in place.
> 
> Is there a better way in Python or is this kind of thing best done in
> Perl ?

open(..., "U") ("universal" mode) converts arbitrary line endings to just 
"\n"

$ cat -e file.dos
alpha^M$
beta^M$
gamma^M$

$ python -c'open("file.unix", "wb").writelines(open("file.dos", "U"))'

$ cat -e file.unix
alpha$
beta$
gamma$

But still, if you want very short (and often cryptic) code Perl is hard to 
beat. I'd say that Python doesn't even try.

Peter



More information about the Python-list mailing list