Refactoring, oder wie macht man es schön.
Verfasst: Samstag 2. Mai 2009, 12:18
Hallo an alle,
als Physiker finde ich Python sehr praktisch, wenn ich einfach loslege sieht das Ergebnis aber irgendwie nie wirklich elegant aus. Hier sind wieder einmal 30 Zeilen Code, die ich nicht besser hinbekommen habe. Das ganze konvertiert binäre Messdaten in eine leserliche ASCII-Form.
Habt ihr vielleicht den ein oder anderen Vorschlag wie man das schöner erledigen kann?
Viele Grüße
vario
als Physiker finde ich Python sehr praktisch, wenn ich einfach loslege sieht das Ergebnis aber irgendwie nie wirklich elegant aus. Hier sind wieder einmal 30 Zeilen Code, die ich nicht besser hinbekommen habe. Das ganze konvertiert binäre Messdaten in eine leserliche ASCII-Form.
Code: Alles auswählen
# quick converter for raw-measurement files
# file format:
#
# 256 bytes header
# 56 bytes entry: 7 IEEE doubles (64 bit)
# 56 bytes entry: 7 IEEE doubles (64 bit)
# ...
import glob
from struct import unpack
from numpy import array, savetxt
def convertEntry(buffer, listArray):
struct = '7d'
row = unpack(struct, buffer)
for i, item in enumerate(row):
listArray[i].append(item)
# look for raw files
filenames = glob.glob('*.raw')
for name in filenames:
# initialize
listArray = [ [], [], [], [], [], [], [] ]
f = open(name, 'rb')
# seek to first entry
f.seek(256)
# read data and parse it
structLength = 56
while True:
buffer = f.read(structLength)
if buffer == '':
break
convertEntry(buffer, listArray)
f.close()
time = listArray[0]
voltage = listArray[1]
current = listArray[2]
amplitude = listArray[3]
delay = listArray[4]
resistance = listArray[5]
table = array([time, voltage, current, amplitude, delay, resistance]).transpose()
savetxt((name +'.dat'), table, fmt='%.7e', delimiter='\t' )
Viele Grüße
vario