[CentralOH] Weird issue reading a Mainframe file with Python

Andrew Kubera akubera at kent.edu
Wed May 20 17:28:59 CEST 2015


It looks like read() is returning a string, then the for loop is actually looping through that string one character at a time.

If each of the records are on one line, you can simply iterate over the file:   for line in fp: ...

If not, you should turn your loop into:

while True:
    line = fp.read(26)
    if len(line) < 26: break
    ...

Or be fancy with a generator (I assume that’s in python2.4?):

def next_record(file):
    while True:
    line = fp.read(26)
    if len(line) < 26: raise StopIteration
 <https://docs.python.org/2/library/exceptions.html#exceptions.StopIteration>
    yield line

for record in next_record(fp):
    ...
  
- Andrew Kubera


> On May 20, 2015, at 11:04 AM, Joshua Kramer <joskra42.list at gmail.com> wrote:
> 
> Hello all!
> 
> I have a rather bizarre issue reading files that came from an IBM
> Mainframe.  I am on a Linux server, FTP'ing the files from the
> Mainframe, and running a Python script.  It seems like the Python
> script always reads just one byte at a time from the file!  For
> example, if you have a file with records like this (this is two
> records, each one being of length 26):
> 
> 00423SMITH   JOHN  126400100423SMITH   ROBERT1264001
> 
> If you open this file with any text editor on Linux, it appears as it is there.
> 
> If I do this in Python:
> 
> fp = open("FILE.DAT", "rb")
> for line in fp.read(26):
>    print "Record is: " + line
> 
> Then what I will get is this:
> Record is: 0
> Record is: 0
> Record is: 4
> Record Is: 2
> Record Is: 3
> ...etcetera.
> 
> I wrote the same program in C, and I got the results I expected- not
> these results.  So I have reason to believe that the file is good.
> 
> I am using Python 2.4.3.  (Unfortunately, stuck on an ancient RedHat server...)
> 
> What am I missing here?
> 
> Thanks!
> -JK
> _______________________________________________
> CentralOH mailing list
> CentralOH at python.org
> https://mail.python.org/mailman/listinfo/centraloh

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/centraloh/attachments/20150520/71afd01e/attachment-0001.html>


More information about the CentralOH mailing list