Newby Question for reading a file
Peter Otten
__peter__ at web.de
Thu Feb 19 14:38:11 EST 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