Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
mit
User
Beiträge: 285 Registriert: Dienstag 16. September 2008, 10:00
Mittwoch 9. Juni 2010, 11:25
Hallo,
die folgende Eingabedatei beinhaltet Strings, String ID (z.B. B7_591) und deren Start und Endpostion (z.B.ranage: 1-36 ) relativ zu einander:
Code: Alles auswählen
B7_591 ranage: 1-36
ibivbfvffivibvvfvbbbvfvfvffvvvbbivif
B7_592 ranage: 3-37
ivbfvffivibvvfvbbbvfvfvffvvvbbivifv
A7_593 ranage: 5-39
bfvffivibvvfvbbbvfvfvffvvvbbivifvii
C8_591 ranage: 6-41
fvffivibvvfvbbvvvvvvfvvvvbbivivviviv
Q1_591 ranage: 9-43
fivibvvfvbbbvfvfvffvvvbbivifviibvff
Z1_591 ranage: 9-43
uiribvvfvbbbvfvfvffvvvbbivifviibvff
...
Bringt man die oberen Strings entsprechen der Startpostion zur Deckung so erhält folgendes:
Code: Alles auswählen
ibivbfvffivibvvfvbbbvfvfvffvvvbbivif
ivbfvffivibvvfvbbbvfvfvffvvvbbivifv
bfvffivibvvfvbbbvfvfvffvvvbbivifvii
fvffivibvvfvbbvvvvvvfvvvvbbivivviviv
fivibvvfvbbbvfvfvffvvvbbivifviibvff
uiribvvfvbbbvfvfvffvvvbbivifviibvff
...
Wie könnte eine Datestruktur aussehen der man die gewünschte Position z.B.9 gebt und man erhält folgende Ausgabe:
f: B7_591
f: B7_592
f: A7_593
f: C8_591
f: Q1_591
u: Z1_591
Viele Dank im Voraus.
Viele Grüße
BlackJack
Mittwoch 9. Juni 2010, 11:59
Vielleicht etwas in dieser Richtung!?
Code: Alles auswählen
from itertools import izip
class Thing(object):
def __init__(self, name, value, offset):
self.name = name
self.value = value
self.offset = offset
def __str__(self):
return '%s:%s%s' % (self.name, ' ' * self.offset, self.value)
def __getitem__(self, index):
if index < self.offset:
raise IndexError('index %r too small (min: %r)'
% (index, self.offset))
return self.value[index - self.offset]
def parse(lines):
lines = iter(lines)
for i, (name_line, value) in enumerate(izip(lines, lines)):
name, dummy, range_ = name_line.split()
value = value.rstrip()
offset, end = map(int, range_.split('-'))
if end - offset + 1 != len(value):
raise ValueError('range error in line %d' % (i * 2))
yield Thing(name, value, offset)
def get_item(things, index):
for thing in things:
try:
yield (thing[index], thing.name)
except IndexError:
pass # Intentionally ignored.
def main():
with open('test.txt') as lines:
things = list(parse(lines))
for thing in things:
print thing
for item, name in get_item(things, 9):
print '%s: %s' % (item, name)