list, fehlende felder einfügen und sortieren
Verfasst: Montag 23. Mai 2011, 13:01
Hi,
Ich habe folgende Beispieldatei:
Ich möchte erreichen das in jeder Zeile alle "Text*:" Felder vorkommen und diese sortiert sind. (Reihenfolge ist egal, nur sollte es in jeder Zeile gleich sein.)
Sollte ein Feld in einer Zeile nicht vorkommen soll dieses eingefügt werden.
Ich habe versucht das file in eine liste einzulesen und mit re.search und einigen If-abfragen zum Ergebnis zu kommen, leider fehlt mir wohl mal wieder der entscheidende Tip.
Ausgabe:
(Ich habe group(1) durch group() ersetzt um die Ausgabe etwas besser lesbar zu machen.)
WIe man sieht wird hier gar nichts sortiert.
Mein Ansatz scheint so nicht zu funktionieren
Das Problem das Felder nun doppelt vorkommen wollte ich später angehen, wobei wohl eine Möglichkeit Felder innerhalb einer Liste verschieben zu können dieses Problem gleich lösen könnte...
Ich habe folgende Beispieldatei:
Code: Alles auswählen
Text1: 1.10-1; Text2: misc; Text3: 2-1.0; Text4: BlaBlaBla;
Text1: 1.02-1; Text3: 2-1.0; Text4: BlaBlaBla;
Text1: 1.00-1; Text2: misc; Text4: BlaBlaBla;
Text1: 1.00-1; Text4: BlaBlaBla;
Text1: blabla;
Text1: 1.00-1; Text3: 2-1.0; Text4: BlaBlaBla;
[...]
Sollte ein Feld in einer Zeile nicht vorkommen soll dieses eingefügt werden.
Ich habe versucht das file in eine liste einzulesen und mit re.search und einigen If-abfragen zum Ergebnis zu kommen, leider fehlt mir wohl mal wieder der entscheidende Tip.
Code: Alles auswählen
#!/usr/bin/python
import re
f = file('test.txt', 'r')
for line in f:
reg1 = re.search(r'Text1: ([\w].*)',line)
reg2 = re.search(r'Text2: ([\w].*)',line)
reg3 = re.search(r'Text3: ([\w].*)',line)
reg4 = re.search(r'Text4: ([\w].*)',line)
sline = line.split(";")
if reg1:
sline.insert(0,reg1.group(1))
else:
sline.insert(0,"Text1: ")
if reg2:
sline.insert(1,reg2.group(1))
else:
sline.insert(1,"Text2: ")
if reg3:
sline.insert(2,reg3.group(1))
else:
sline.insert(2,"Text3: ")
if reg4:
sline.insert(3,reg4.group(1))
else:
sline.insert(3,"Text4: ")
print sline
f.close()
Ausgabe:
(Ich habe group(1) durch group() ersetzt um die Ausgabe etwas besser lesbar zu machen.)
Code: Alles auswählen
['Text1: 1.10-1; Text2: misc; Text3: 2-1.0; Text4: BlaBlaBla;', 'Text2: misc; Text3: 2-1.0; Text4: BlaBlaBla;', 'Text3: 2-1.0; Text4: BlaBlaBla;', 'Text4: BlaBlaBla;', 'Text1: 1.10-1', ' Text2: misc', ' Text3: 2-1.0', ' Text4: BlaBlaBla', '\n']
['Text1: 1.02-1; Text3: 2-1.0; Text4: BlaBlaBla;', 'Text2: ', 'Text3: 2-1.0; Text4: BlaBlaBla;', 'Text4: BlaBlaBla;', 'Text1: 1.02-1', ' Text3: 2-1.0', ' Text4: BlaBlaBla', '\n']
['Text1: 1.00-1; Text2: misc; Text4: BlaBlaBla;', 'Text2: misc; Text4: BlaBlaBla;', 'Text3: ', 'Text4: BlaBlaBla;', 'Text1: 1.00-1', ' Text2: misc', ' Text4: BlaBlaBla', '\n']
['Text1: 1.00-1; Text4: BlaBlaBla;', 'Text2: ', 'Text3: ', 'Text4: BlaBlaBla;', 'Text1: 1.00-1', ' Text4: BlaBlaBla', '\n']
['Text1: blabla;', 'Text2: ', 'Text3: ', 'Text4: ', 'Text1: blabla', '\n']
['Text1: 1.00-1; Text3: 2-1.0; Text4: BlaBlaBla;', 'Text2: ', 'Text3: 2-1.0; Text4: BlaBlaBla;', 'Text4: BlaBlaBla;', 'Text1: 1.00-1', ' Text3: 2-1.0', ' Text4: BlaBlaBla', '\n']

Das Problem das Felder nun doppelt vorkommen wollte ich später angehen, wobei wohl eine Möglichkeit Felder innerhalb einer Liste verschieben zu können dieses Problem gleich lösen könnte...