@Ronnie: schon klar....Ronnie hat geschrieben:Sorry, ...
Parsing Hilfe...
Dann eben mit einem Array_of_Dictionaries:walha2006 hat geschrieben:... das Problem mit dem Loop ...geht einfach nicht mit dem hash/dictionary..
Code: Alles auswählen
>>> config = """LOOPSTART [TEST] COUNT [5]
DIAG [T] SEND[22,3F]EXPECT[] TIMEOUT [0] SOURCE[F1] TARGET [00]
DIAG [T] SEND[22,0B]EXPECT[] TIMEOUT [0] SOURCE[F1] TARGET [05]
DIAG [T] SEND[22,3F]EXPECT[] TIMEOUT [0] SOURCE[F1] TARGET [0D]
WAIT [5000]
LOOPEND [TEST]"""
>>> table = [dict([ (m[0], m[-1].split(',')) if re.match(r'[0-9A-F*]+,', m[-1]) else m for m in re.findall(r'(\w+)\s*\[(.*?)\]', l)]) for l in config.split("\n")]
Achtung: User ist ein Python-Lehrling!
aber Dem Inhalt von dem Datein ändert sich ,Besonders zwischen [ ] ,ändert sich ,wie kann ich die Werte markieren Z.B im COUNT[?]?Ronnie hat geschrieben:Dann eben mit einem Array_of_Dictionaries:walha2006 hat geschrieben:... das Problem mit dem Loop ...geht einfach nicht mit dem hash/dictionary..Code: Alles auswählen
>>> config = """LOOPSTART [TEST] COUNT [5] DIAG [T] SEND[22,3F]EXPECT[] TIMEOUT [0] SOURCE[F1] TARGET [00] DIAG [T] SEND[22,0B]EXPECT[] TIMEOUT [0] SOURCE[F1] TARGET [05] DIAG [T] SEND[22,3F]EXPECT[] TIMEOUT [0] SOURCE[F1] TARGET [0D] WAIT [5000] LOOPEND [TEST]""" >>> table = [dict([ (m[0], m[-1].split(',')) if re.match(r'[0-9A-F*]+,', m[-1]) else m for m in re.findall(r'(\w+)\s*\[(.*?)\]', l)]) for l in config.split("\n")]
walha2006 hat geschrieben:aber Dem Inhalt von dem Datein ändert sich ,Besonders zwischen [ ] ,ändert sich ,wie kann ich die Werte markieren Z.B im COUNT[?]?
Code: Alles auswählen
table[0]['COUNT']
Achtung: User ist ein Python-Lehrling!
da ich vermute, dass der OP Probleme hat die verschachtelte Datenstruktur zu nutzen, hier mal ein kleines (konstruiertes) Beispiel:
Code: Alles auswählen
>>> config = """LOOPSTART [TEST] COUNT [5]
DIAG [T] SEND[22,3F]EXPECT[] TIMEOUT [0] SOURCE[F1] TARGET [00]
DIAG [T] SEND[22,0B]EXPECT[] TIMEOUT [0] SOURCE[F1] TARGET [05]
DIAG [T] SEND[22,3F]EXPECT[] TIMEOUT [0] SOURCE[F1] TARGET [0D]
WAIT [5000]
LOOPEND [TEST]"""
>>> table = [dict([ (m[0], m[-1].split(',')) if re.match(r'[0-9A-F*]+,', m[-1]) else m for m in re.findall(r'(\w+)\s*\[(.*?)\]', l)]) for l in config.split("\n")]
>>> class ComProbe:
def __init__(self, t):
self.name = t[0]['LOOPSTART']
self.cnt = t[0]['COUNT']
self.tests = t[1:-1]
def run(self):
for i in range(0, int(self.cnt)):
print("running " + self.name + " for " + str(i+1) + " time:")
for test in self.tests:
if 'DIAG' in test:
print("\tsending " + str(test['SEND']) + " from " + test['SOURCE'] + " to " + test['TARGET'] )
else:
print("\twaiting: "+ test['WAIT'])
>>> t = ComProbe(table)
>>> t.run()
Achtung: User ist ein Python-Lehrling!
Vielen dank Ronnie ,aber ich habe verschidene Datein
(test1.txt ,test2.txt)
ich muss die Files öffnen und dann suchen ,jeder Datei hat verschiedene Werten ,zwichen [..]
hier habe ich so versucht:
aber ich glaube ohne die Config ,geht nicht ,weil dem config ändert sich beim jeden Datei ..oder?
Danke Danke Danke Danke Danke Danke
(test1.txt ,test2.txt)
ich muss die Files öffnen und dann suchen ,jeder Datei hat verschiedene Werten ,zwichen [..]
hier habe ich so versucht:
Code: Alles auswählen
def leseDatei(datei):
d = {}
f = open(datei)
for zeile in f:
zeile = zeile.strip()
wort = zeile.strip()
if "LOOPSTART" in zeile:
key, d[key] = (s.strip() for s in zeile.split("\n"))
elif "key" in locals():
d[key] += "\n%s" % zeile.strip()
f.close()
return d
def __init__(self, t):
self.name = t[0]['LOOPSTART']
self.cnt = t[0]['COUNT']
self.tests = t[1:-1]
def run(self):
for i in range(0, int(self.cnt)):
print("running " + self.name + " for " + str(i+1) + " time:")
for test in self.tests:
if 'DIAG' in test:
print("\tsending " + str(test['SEND']) + " from " + test['SOURCE'] + " to " + test['TARGET'] )
else:
print("\twaiting: "+ test['WAIT'])
Danke Danke Danke Danke Danke Danke
He!
hier versuche ich das Problem nochmal zu eklären
ich habe einfach Text Datein (test1.txt ,test2.txt...),
ZB.inhalt von test1:
(
LOOPSTART [TEST1] COUNT [2]
DIAG [T] SEND[22,3F]EXPECT[] TIMEOUT [0] SOURCE[F1] TARGET [00]
WAIT [5000]
LOOPEND [TEST]
)
Inhalt von test2:
(
LOOPSTART [TEST2] COUNT [1]
DIAG [T] SEND[20,AF]EXPECT[] TIMEOUT [0] SOURCE[F4] TARGET [10]
WAIT [1000]
LOOPEND [TEST2]
)
ich wollte :
1:Datei öffnen und finde COUNT
2:speichern dem Wert von COUNT (ZB. in test1 "2" ,in test2 "1" )
3:lesen dem Inhalt dem Schleife in Reihe (zwichen LOOPSTART und LOOPENDE ) und dem Ganze wiederholen COUNT mal ,Hier im (test1)
2 mal :
im test 1 soll die ausgabe so sein:
(
DIAG: 'T' ; SEND: '22,3F' EXPECT:' ';TIMEOUT:'0'; SOURCE:'F1' ;TARGET:'00'; WAIT:'5000'
DIAG: 'T' ; SEND: '22,3F' EXPECT:' ';TIMEOUT:'0'; SOURCE:'F1' ;TARGET:'00';WAIT:'5000'
)
und in test 2 soll die Ausgabe so sein
(
DIAG: 'T' ; SEND: '20,AF' EXPECT:' ';TIMEOUT:'0'; SOURCE:'F4' ;TARGET'10';WAIT:'1000'
)
hier versuche ich das Problem nochmal zu eklären
ich habe einfach Text Datein (test1.txt ,test2.txt...),
ZB.inhalt von test1:
(
LOOPSTART [TEST1] COUNT [2]
DIAG [T] SEND[22,3F]EXPECT[] TIMEOUT [0] SOURCE[F1] TARGET [00]
WAIT [5000]
LOOPEND [TEST]
)
Inhalt von test2:
(
LOOPSTART [TEST2] COUNT [1]
DIAG [T] SEND[20,AF]EXPECT[] TIMEOUT [0] SOURCE[F4] TARGET [10]
WAIT [1000]
LOOPEND [TEST2]
)
ich wollte :
1:Datei öffnen und finde COUNT
2:speichern dem Wert von COUNT (ZB. in test1 "2" ,in test2 "1" )
3:lesen dem Inhalt dem Schleife in Reihe (zwichen LOOPSTART und LOOPENDE ) und dem Ganze wiederholen COUNT mal ,Hier im (test1)
2 mal :
im test 1 soll die ausgabe so sein:
(
DIAG: 'T' ; SEND: '22,3F' EXPECT:' ';TIMEOUT:'0'; SOURCE:'F1' ;TARGET:'00'; WAIT:'5000'
DIAG: 'T' ; SEND: '22,3F' EXPECT:' ';TIMEOUT:'0'; SOURCE:'F1' ;TARGET:'00';WAIT:'5000'
)
und in test 2 soll die Ausgabe so sein
(
DIAG: 'T' ; SEND: '20,AF' EXPECT:' ';TIMEOUT:'0'; SOURCE:'F4' ;TARGET'10';WAIT:'1000'
)