No Problem, mache ich gerne.
Also: Strings haben die, meines Erachtens geniale, Möglichkeit Teile direkt rauszulösen, ohne irgendwelche Funktionen nutzen zu müssen, die Slices. Ihre Syntax besteht aus: st[ersteszeichen:letzteszeichen] (vereinfacht, sie haben noch mehr Möglichkeiten, aber das reicht bis jetzt), wobei st der String ist und die beiden Nummern in den Klammern die Nummer des ersten Zeichens und die des letztens Zeichens in dem String ist.
Zur Verdeutlichung ein paar Beispiele:
Code: Alles auswählen
st = 'Hallo'
print st
# Hallo
print st[1:4]
# all
print st[1:]
# allo, also der String vom zweiten Buchstaben bis zum Ende
print st[:4]
# Hall, analog ^^
Nun, das reicht, ich will dich jetzt im Moment nicht weiter verunsichern. Hauptsache du verstehst nun die einfachen Slices (die anderen kann ich dir auch erklären, wenn du diese verstanden hast).
Nun weiter im Programm. Wir müssen ja nun ermitteln WO wir anfangen und aufhören müssen zu schneiden. Also fangen wir an zu suchen, wo
"Targets" in diesem String anfängt (besser wäre
"Targets: ", dann wird nicht das Wort
"Targets" durch Zufall vielleicht früher schon gefunden). Das erledigt bei uns
.find(). Jetzt noch der Endpunkt, analog dazu mit
.rfind(), das den String von hinten/rechts durchsucht, dach dem ersten Vorkommen von
"Total Package Size: ".
Also gut, der Code sieht jetzt so aus:
Code: Alles auswählen
st = """:: Replace fam with gaim from "current"? [Y/n] :: Upgrade pacman first? [Y/n]
Remove: fam
Targets: bootsplash-3.1-8 fontconfig-2.2.3-7 gdm-2.6.0.7-1 ggv-2.8.3-1
glib2-2.6.2-1 glibc-2.3.4-1 gnome-common-2.8.0-5 gnome-mag-0.11.14-1
gnome-nettool-1.1.0-1 gamin-0.0.22-1 gnome-vfs-2.8.3-5
Total Package Size: 83.5 MB
Proceed with upgrade? [Y/n]"""
packages = st[st.find('Targets: '):st.rfind('Total Package Size:')]
print packages
und raus kommt:
Code: Alles auswählen
Targets: bootsplash-3.1-8 fontconfig-2.2.3-7 gdm-2.6.0.7-1 ggv-2.8.3-1
glib2-2.6.2-1 glibc-2.3.4-1 gnome-common-2.8.0-5 gnome-mag-0.11.14-1
gnome-nettool-1.1.0-1 gamin-0.0.22-1 gnome-vfs-2.8.3-5
Nanu? Wir haben ja noch
"Targets: " drinnen? Genau, da wir im Slice ja als Anfangspunkt das erste Vorkommen von
"Targets: " angenommen haben. Das ist aber etwas zu früh. So sollten wir erst
nach "Targets: " schneiden anfangen, indem wir zum Schnittanfangspunkt noch die Länge von
"Targets: " hinzuaddieren.
Also:
Code: Alles auswählen
packages = st[st.find('Targets: ') + len('Targets: '):st.rfind('Total Package Size:')]
print packages
das uns dann ein
Code: Alles auswählen
bootsplash-3.1-8 fontconfig-2.2.3-7 gdm-2.6.0.7-1 ggv-2.8.3-1
glib2-2.6.2-1 glibc-2.3.4-1 gnome-common-2.8.0-5 gnome-mag-0.11.14-1
gnome-nettool-1.1.0-1 gamin-0.0.22-1 gnome-vfs-2.8.3-5
bringt.
Nun sind wir fast fertig. Wir wollen ja die einzelnen Pakete haben, deswegen schneiden wir den String an den Whitespaces (Leerzeichen, Tabs usw) mit
.split(). Somit bekommen wir eine Liste mit den einzelnen Paketen.
Code: Alles auswählen
packages = st[st.find('Targets: ') + len('Targets: '):st.rfind('Total Package Size:')].split()
print packages
gibt uns dann:
Code: Alles auswählen
['bootsplash-3.1-8', 'fontconfig-2.2.3-7', 'gdm-2.6.0.7-1',
'ggv-2.8.3-1', 'glib2-2.6.2-1', 'glibc-2.3.4-1', 'gnome-common-2.8.0-5',
'gnome-mag-0.11.14-1', 'gnome-nettool-1.1.0-1', 'gamin-0.0.22-1', 'gnome-vfs-2.8.3-5']
Bei weiteren Fragen oder bestehenden Unklarheiten, einfach nachfragen.