Seite 1 von 1
Replace Funktion für String in einer Liste nutzen.
Verfasst: Mittwoch 17. April 2013, 09:59
von Twinhand
Hallo zusammen,
ich habe folgendes Problem, und zwar möchte aus einer Liste einen bestimtmen Nutzer mittel "replace" entfernen ( da remove bei einem String nicht zu funktionieren scheint)
- 1: test, laben, super2222, super99999, super100, ssuper7775, super99, super98, super9998, kleinertimmy9
2: super99999, super6665, super 3000,super333 ,super3333, super3333, super3333, super3333
3: super99999, super6665, 2, super3342
# asdadadadadsadadasdadsadsads
Das ist die Liste aus der ich einen Nutzer löschen möchte, nur wenn ich jetzt versuche z.B den Nutzer super333 zu löschen habe ich folgendes Problem:
Wenn ich nun mit
benutze, dann löscht dieser Code mir nicht nur den Nutzer super333 sonder logischweise aus das Teilstück der Nutzer super3333, so das nur eine 3 zurück bleibt. Außerdem bleibt beim Nutzer super333 eine unschöne Stelle mit 2 Kommas zurück.
Hat jemand eine Idee wie dieses Problem zu löschen ist?
Ich danke schonmal im vorraus.
MfG
Twinhand
Re: Replace Funktion für String in einer Liste nutzen.
Verfasst: Mittwoch 17. April 2013, 10:16
von /me
Twinhand hat geschrieben:- 1: test, laben, super2222, super99999, super100, ssuper7775, super99, super98, super9998, kleinertimmy9
2: super99999, super6665, super 3000,super333 ,super3333, super3333, super3333, super3333
3: super99999, super6665, 2, super3342
# asdadadadadsadadasdadsadsads
Bitte erkläre genauer wie diese "Liste" aussieht. Ist jede Zeile ein Eintrag in der Liste? Oder ist es ein String und du nennst ihn nur Liste weil die Daten logisch so behandelt werden? Sind die Kommas wirklich so unglücklich verteilt (mal mit Leerzeichen davor, mal mit Leerzeichen danach und mal ganz ohne umgebende Leerzeichen)?
Gehen wir mal davon aus, dass eine Zeile konsistent aufgebaut ist, also ohne Leerzeichen im Usernamen, dafür mit folgendem Komma und Leerzeichen. Dann könntest du einfach alles ersetzen was aus
Leerzeichen + Username + Komma besteht. Um den letzten Eintrag zu erwischen muss temporär ein Komma angehängt werden.
Ganz ausführlich sieht das dann so aus.
Code: Alles auswählen
line = '2: super99999, super6665, super 3000, super333, super3333, super3333, super3333, super3333'
username = 'super333'
line += ','
line = line.replace(' ' + username + ',', '')
line = line.rstrip(',')
Alternativ könnte man das ganze direkt in eine sinnvolle Struktur überführen auf der man dann besser arbeiten kann.
Re: Replace Funktion für String in einer Liste nutzen.
Verfasst: Mittwoch 17. April 2013, 10:33
von Sirius3
Hallo Twinhand,
am besten überführst Du den String in eine tatsächliche Liste, entfernst den Namen und baust einen neuen String zusammen.
Grüße
Sirius
Re: Replace Funktion für String in einer Liste nutzen.
Verfasst: Mittwoch 17. April 2013, 10:43
von Twinhand
Ok, ich habe gedacht das sich das ganz einfach lösen lässt, deswegen habe ich das nicht in meinem Hauptthread gepostet, die neusten Informationen zu diesem Thema sind unter folgenden Link zu finden, ich danke schonmal für eure Hilfe.
http://www.python-forum.de/viewtopic.php?f=1&t=31358
Das Problem was ich angesprochen habe ist auf der zweiten Seite, und in diesem Thread sind hoffentlich auch alle Informationen.^^
MfG
Twinhand
Closed
Re: Replace Funktion für String in einer Liste nutzen.
Verfasst: Mittwoch 17. April 2013, 10:46
von /me
Sirius3 hat geschrieben:am besten überführst Du den String in eine tatsächliche Liste, entfernst den Namen und baust einen neuen String zusammen.
Teil 1 der Aufgabe:
Code: Alles auswählen
from collections import OrderedDict
raw_data = """1: test, laben, super2222, super99999, super100, ssuper7775, super99, super98, super9998, kleinertimmy9
2: super99999, super6665, super 3000,super333 ,super3333, super3333, super3333, super3333
3: super99999, super6665, 2, super3342
# asdadadadadsadadasdadsadsads"""
info = OrderedDict()
data = raw_data.split('\n')
for row in data:
key, _, values = row.partition(':')
info[key] = [value.strip() for value in values.split(',')]
Edit: Da du anscheinend die Reihenfolge behalten möchtest habe ich das Dictionary durch ein
OrderedDict ersetzt.
Re: Replace Funktion für String in einer Liste nutzen.
Verfasst: Mittwoch 17. April 2013, 10:53
von BlackJack
@/me: Gibt es einen speziellen Grund für `partition()`? Ich hätte gedacht der „offensichtliche Weg” ist ``split(':', 1)`` wenn man den Doppelpunkt nicht braucht. Und auch weil `partition()` relativ neu ist, man also die `split()`-Lösung deutlich öfter finden wird.
Re: Replace Funktion für String in einer Liste nutzen.
Verfasst: Mittwoch 17. April 2013, 11:05
von /me
BlackJack hat geschrieben:@/me: Gibt es einen speziellen Grund für `partition()`? Ich hätte gedacht der „offensichtliche Weg” ist ``split(':', 1)`` wenn man den Doppelpunkt nicht braucht.
Mit
partition spare ich mir den Vergleich auf die Länge des Resultats.
Re: Replace Funktion für String in einer Liste nutzen.
Verfasst: Mittwoch 17. April 2013, 12:15
von BlackJack
@/me: Hm, das ist ein Punkt. Insgesamt ist das aber IMHO keine Lösung für das Problem denn gleiche Kommentare werden zu einem reduziert und die Reihenfolge geht verloren. Soweit ich das verstanden habe sollen Kommentare ja erhalten bleiben und da ist die Reihenfolge wichtig.
Vielleicht sollte man noch mal in dieses Thema „rüber retten”, dass es immer noch um den Inhalt von Daten in Form der ``/etc/aliases``-Datei geht.