Seite 1 von 1

Daten in Blöcken fester Länge aufteilen...

Verfasst: Freitag 5. August 2005, 12:34
von jens
Ich möchte nochmal auf die Problematik in dem Thread http://www.python-forum.de/viewtopic.php?p=21705#21705 hinweisen ;) Bzw. mein Kram zur Optimierung vorstellen, denn ich denke das mein Verfahren nicht wirklich optimal gelösst ist.

Das Problem ist, das ich Daten variabler Länge in 8 Zeichen Blöcke aufteilen will:

Code: Alles auswählen

import math, re

    def mkblocks ( self, data ):
        datalen = len(data)

        # Nächste Blockgröße in der data reinpaßt
        blocklen = int( math.ceil( datalen/8.0 ) ) * 8

        # data auffüllen, damit es exakt in die Blockgröße reinpaßt
        data += "\x00" * (blocklen - datalen)

        # in Blöcke von 8 Bytes aufteilen
        return re.findall( ".{8}", data )
Ein Problem sehe ich auch mit dem Auffüllen mit NULL-Bytes, wenn in den Daten evtl. schon NULL-Bytes am Ende stehen... Aber so willt ist das für mich erstmal nicht...

Re: Daten in Blöcken fester Länge aufteilen...

Verfasst: Freitag 5. August 2005, 14:24
von joe
Hi!
jens hat geschrieben:

Code: Alles auswählen

        # in Blöcke von 8 Bytes aufteilen
        return re.findall( ".{8}", data )
Sind in data "binäre" daten? Dann scheitert re.findall() bei jedem '\x0A'.
Ich würd es eher so machen:

Code: Alles auswählen

    return [data[i*8:i*8+8] for i in range((len(data)-1)/8+1)]
joe

Verfasst: Freitag 5. August 2005, 16:24
von jens
Du bringst mich da auf eine Idee:

Code: Alles auswählen

import math

    def mkblocks ( self, data ):
        datalen = len(data)

        # Länge gerundet auf nächst höhere Blockgröße
        blocklen = int( math.ceil( datalen/8.0 ) ) * 8

        # data auffüllen, damit es exakt in die Blockgröße reinpaßt
        data += "\x00" * ( blocklen - datalen )

        # in Blöcke von 8 Bytes aufteilen
        return [data[i:i+8] for i in range( 0, blocklen, 8 )]