Newby Question for reading a file

Peter Otten __peter__ at web.de
Thu Feb 19 20:38:11 CET 2009


steven.oldner wrote:

> On Feb 19, 12:40 pm, Mike Driscoll <kyoso... at gmail.com> wrote:
>> On Feb 19, 12:32 pm, "steven.oldner" <steven.old... at gmail.com> wrote:
>>
>> > Simple question but I haven't found an answer.  I program in ABAP, and
>> > in ABAP you define the data structure of the file and move the file
>> > line into the structure, and then do something to the fields.  That's
>> > my mental reference.
>>
>> > How do I separate or address each field in the file line with PYTHON?
>> > What's the correct way of thinking?
>>
>> > Thanks!
>>
>> I don't really follow what you mean since I've never used ABAP, but
>> here's how I typically read a file in Python:
>>
>> f = open("someFile.txt")
>> for line in f:
>> # do something with the line
>> print line
>> f.close()
>>
>> Of course, you can read just portions of the file too, using something
>> like this:
>>
>> f.read(64)
>>
>> Which will read 64 bytes. For more info, check the following out:
>>
>> http://www.diveintopython.org/file_handling/file_objects.html
>>
>> - Mike
> 
> Hi Mike,
> 
> ABAP is loosely based on COBOL.
> 
> Here is what I was trying to do, but ended up just coding in ABAP.
> 
> Read a 4 column text file of about 1,000 lines and compare the 2
> middle field of each line.  If there is a difference, output the line.
> 
> The line's definition in ABAP is PERNR(8) type c, ENDDA(10) type c,
> BEGDA(10) type c, and LGART(4) type c.
> In ABAP the code is:
> LOOP AT in_file.
>   IF in_file-endda <> in_file-begda.
>     WRITE:\ in_file. " that's same as python's print
>   ENDIF.
> ENDLOOP.
> 
> I can read the file, but didn't know how to look st the fields in the
> line.  From what you wrote, I need to read each segment/field of the
> line?

Yes you can get portions of the line by slicing:

for line in open("infile"):
    if line[8:18] != line[18:28]:
            print line,

Or you can use the struct module:

import struct
for line in open("infile"):
    pernr, endda, begda, lgart, dummy = struct.unpack("8s10s10s4s1s", line)
    if endda != begda:
        print line,

I'm assuming that a row in your input file is just the fields glued together
followed by a newline.

Peter




More information about the Python-list mailing list