fileinput.input, readlines and ...

Peter Otten __peter__ at web.de
Wed Jun 24 07:32:32 EDT 2009


Przemyslaw Bak wrote:

> Hello,
> 
> I many files with log data. The structure of the file is quite
> inconvenience and similar to the following example:
> Data1
>   ValueA
> Data2
>   ValueB
> Data3
>   ValueC
> ...
> To get the values I need to find Data* and then get to the next line.
> I tried to use fileinput.input :
> ...
> for line in fileinput.input(filename):
>     if line.find("Data2") >= 0:
>         (now what ?)
> 
> So I can find the requested line (Data2) but how to get value from the
> next line ?

lines = fileinput.input(filename)
for line in lines:
    if "Data2" in line:
        print line.strip(), "-->", next(lines).strip()

> Is the fileinput.input the most convenient for this type of task ?
> Maybe
> readline or readlines would be better ?
> What can you recommend ?

If you need more than a few name value pairs it pays to put the data in a 
dictionary first:

# assuming that values always consist of a single line
with open(filename) as instream:
    lines = (line.strip() for line in lines)
    lookup =  dict(zip(lines, lines))
print lookup["Data2"]
print lookup["Data3"]

Peter




More information about the Python-list mailing list