Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python equivalent of Perl's while (<>) {...}?

Tags:

I write a lot of little scripts that process files on a line-by-line basis. In Perl, I use

while (<>) {     do stuff; } 

This is handy because it doesn't care where the input comes from (a file or stdin).

In Python I use this

if len(sys.argv) == 2: # there's a command line argument     sys.stdin = file(sys.argv[1]) for line in sys.stdin.readlines():     do stuff 

which doesn't seem very elegant. Is there a Python idiom that easily handles file/stdin input?

like image 470
Eisen Avatar asked Apr 30 '09 14:04

Eisen


2 Answers

The fileinput module in the standard library is just what you want:

import fileinput  for line in fileinput.input(): ... 
like image 183
Alex Martelli Avatar answered Oct 08 '22 20:10

Alex Martelli


import fileinput for line in fileinput.input():     process(line) 

This iterates over the lines of all files listed in sys.argv[1:], defaulting to sys.stdin if the list is empty.

like image 44
RichieHindle Avatar answered Oct 08 '22 19:10

RichieHindle