Fixed-length text file to database script

Lie Lie.1296 at gmail.com
Fri Aug 15 08:13:56 EDT 2008


On Aug 15, 7:12 am, John Machin <sjmac... at lexicon.net> wrote:
> On Aug 15, 4:55 am, Edwin.Mad... at VerizonWireless.com wrote:
>
> > #your thought is right.
> > =======================================================
> > def sizes2fields(sizes):
> >    d = []
> >    begin = 0
> >    for i in sizes:
> >       if begin:
> >          end = begin + i
> >       else: end = i
> >       d.append((begin, end))
> >       begin += i
> >    return tuple(d)
>
> Those who are not paid by the keystroke and/or prefer to expend
> keystrokes on meaningful names might like an alternative like this:
> def sizes2offsets(sizes):
>   offsets = []
>   begin = 0
>   for size in sizes:
>     end = begin + size
>     offsets.append((begin, end))
>     begin = end
>   return offsets

This is even shorter: (and IMHO, clearer)

def split(s, fields):
    ret = []
    for field in fields:
        s, d = s[field:], s[:field]
        ret.append(d)
    return ret

sizes = [16, 4, 8, 8, 8]
s = '123456789012345678901234567890123456789012345678901234567890'
print split(s, sizes)

alternatively, if what you've got is the partition position instead of
field width:

def split(s, sizes):
    ret = []
    start = sizes[0]
    for end in sizes[1:]:
        r, start = s[start: end], end
        ret.append(r)
    return ret

sizes = [0, 16, 20, 28, 36, 44]
s = '123456789012345678901234567890123456789012345678901234567890'
print split(s, sizes)

Michael Stroder:
> If the input data has to be pre-processed before storing it into the
> database a Python script would be needed.

But not for converting the fixed length string, you could just have
SQL process the fixed length string then retrieve it back as separate
fields.



More information about the Python-list mailing list