Seite 1 von 1
string-to-list - how to avoid this help_list ...
Verfasst: Freitag 3. Dezember 2010, 11:48
von ts7343
Hallo,
vielleicht eine peinliche Frage, aber ich krieg es nicht auf die Reihe,
ich konvertiere einen String in eine Liste, aber muss die Leerzeichen davor alle loeschen,
zur Zeit arbeite ich ueber eine temporaere help_list_01, die dann ueber einen Loop
durchgehechelt wird, um die Leerzeichen der gesplitteten Strings zu loeschen.
Gibt es da nicht eine elegantere Loesung, vielleicht sogar alles in einer Zeile,
aber trotzdem noch verstaendlich und lesbar?
thanx
Code: Alles auswählen
#!/usr/bin/env python
import string, re, os, sys, datetime
# predefinition
file_list = []
string_of_files = "file_01.txt ; file_02.txt; file_03.txt "
# this damn help list ...
help_list_01 = string.strip(" file_01.txt ; file_02.txt ; file_03.txt ").split(";")
# convert content into clean list
if (len(help_list_01) > 0):
for line in help_list_01:
if (len(string.strip(line)) > 0):
file_list.append(string.strip(line))
print file_list
Re: string-to-list - how to avoid this help_list ...
Verfasst: Freitag 3. Dezember 2010, 12:01
von Xynon1
Nutze doch einfach die String ".translate(...)"-Methode um alle unerwünschten Zeichen zu Filtern.
Dann kannst du ganz normal splitten.
Oder wenn dein Beispiel bindend ist kannst du auch nur spliten und dann einfach ein "strip()" durchführen, da Leerzeichen nur am Anfang oder am Ende stehen.
Re: string-to-list - how to avoid this help_list ...
Verfasst: Freitag 3. Dezember 2010, 12:03
von ms4py
Code: Alles auswählen
file_list = [f.strip() for f in string_of_files.split(';') if f.strip()]
Re: string-to-list - how to avoid this help_list ...
Verfasst: Freitag 3. Dezember 2010, 12:04
von Xynon1
yupp so meinte ich das

Re: string-to-list - how to avoid this help_list ...
Verfasst: Freitag 3. Dezember 2010, 12:06
von EyDu
Meinst du so?
Code: Alles auswählen
>>> filter(bool, map(str.strip, " file_01.txt ; file_02.txt ; file_03.txt ".split(";")))
['file_01.txt', 'file_02.txt', 'file_03.txt']
Noch ein paar Anmerkungen:
- Bei "file_list = []" solltest du dir die ganzen Leerzeichen sparen und "file_list = []" schreiben
- Du brauchst hier das string-Modul nicht, Strings besitzten Methoden
- help_list_01 ist mal ein sehr seltsamer Name
- Um die Bedingungen beim if gehören keine Klammern
- "if len(xyz) > 0:" kannst du genau so gut als "if xyz:" schreiben
- "if (len(help_list_01) > 0):" is überflüssig; wenn die liste leer ist, dann wird auch über keine Element iteriert
- Wenn du den Betreff in Englisch schreibst, warum dann nicht auch den Beitrag. Eine Kombination wirkt schon ein wenig lächerlich.
Sebastian
Re: string-to-list - how to avoid this help_list ...
Verfasst: Freitag 3. Dezember 2010, 12:26
von sma
ms4py hat geschrieben:Code: Alles auswählen
file_list = [f.strip() for f in string_of_files.split(';') if f.strip()]
Unter der Annahme, dass die Dateinamen keine Leerzeichen enthalten und es keine leeren Dateinamen zwischen den ; gibt, finde ich dies einfacher:
Code: Alles auswählen
" file_01.txt ; file_02.txt ; file_03.txt ".replace(" ", "").split(";")
Stefan
Re: string-to-list - how to avoid this help_list ...
Verfasst: Freitag 3. Dezember 2010, 12:50
von ts7343
Hallo,
vielen Dank fuer die Anregungen,
@ms4py und @Xynon:
genau an diese Denke komm ich noch nicht ran,
z.B.
- wieso muss hinter der for schleife kein Doppelpunkt stehen?
- wieso steht hinter dem if command kein Doppelpunkt,
quasi versteh ich die Zeile nicht wirklich, sieht aber genial aus!
Kann da nochmal einer vielleicht ein-zwei Zeilen dazu zur Erklaerung schreiben?
@EyDu:
das mit dem "map" ist natuerlich gut, den kannte ich noch gar nicht, ist das "bool" dazu da, um die Leerstrings abzufangen?
zu den Anmerkungen:
- das mit den Leerzeichen war, damit die Gleichheitszeichen untereinander stehen, wirkt nur bei mehreren Zuweisungen uebersichtlicher,
- help_list_01 ist eine Liste die gerade aushilft, also help_list, so schlimm find ich ihn eigentlich gar nicht, er beschreibt was er macht und den Typ, so macht man das doch eigentlich, wenn man Variablennamen vergibt, oder?
- die Klammern in der if Anweisung ist fuer mich irgendwie besser lesbar,
- sorry fuer den Betreff, hab ich nicht drueber nachgedacht, aber in der IT Branche ist das alles immer so verwurstelt mit den Anglismen, da muss man echt mal aufpassen, besonders wenn man mehr englisch schreibt/liest als deutsch ...
@sma:
Das ganze ist/wird eine Eingabezeile in einem Tkinter-Entry, von daher kann man nie so sicher sein, ob da nicht
doch leere Dateinamen eingegeben werden ... du kennst doch die User ...
Re: string-to-list - how to avoid this help_list ...
Verfasst: Freitag 3. Dezember 2010, 13:00
von Xynon1
ts7343 hat geschrieben:- wieso muss hinter der for schleife kein Doppelpunkt stehen?
- wieso steht hinter dem if command kein Doppelpunkt,
Nennt sich
list-comprehensions.
ts7343 hat geschrieben:Das ganze ist/wird eine Eingabezeile in einem Tkinter-Entry, von daher kann man nie so sicher sein, ob da nicht
doch leere Dateinamen eingegeben werden ... du kennst doch die User ...
Es ging nicht um leere Dateinamen, sondern um Leerzeichen in Dateinamen, da diese bei seinem Beispiel gefiltert werden würden.
Re: string-to-list - how to avoid this help_list ...
Verfasst: Freitag 3. Dezember 2010, 13:43
von EyDu
ts7343 hat geschrieben:das mit dem "map" ist natuerlich gut, den kannte ich noch gar nicht, ist das "bool" dazu da, um die Leerstrings abzufangen?
Ja, denn ein leerer String wird mit bool immer zu "False" ausgewertet, in allen anderen Fällen zu "True"
ts7343 hat geschrieben:- das mit den Leerzeichen war, damit die Gleichheitszeichen untereinander stehen, wirkt nur bei mehreren Zuweisungen uebersichtlicher,
- die Klammern in der if Anweisung ist fuer mich irgendwie besser lesbar,
Das macht den Code beides nicht wirklich lesbarer. Vorallem Klammern sind hier überflüssiges Rauschen, welches mehr verwirrt als Hilft. Ich nehme mal an, dass du von einer anderen Sprache kommst, so Klammern notwendig sind. Wenn du eine neue Sprache verwendest, solltest du dich aber auch an deren Gepflogenheiten halten. Das ist natürlich dann in jedem Fall sinnvoll, wenn andere deinen Code anschauen sollen. Vielleicht wirst du mal einen Blick in PEP8.
ts7343 hat geschrieben:- help_list_01 ist eine Liste die gerade aushilft, also help_list, so schlimm find ich ihn eigentlich gar nicht, er beschreibt was er macht und den Typ, so macht man das doch eigentlich, wenn man Variablennamen vergibt, oder?
Im Prinzip sind es gleich zwei Dinge die stören: das vollkommen zusammenhangslose "01" und dann der Typ im Namen. Letzteres wird eigentlich kaum noch praktiziert, da es nur Nachteile bringt. Was passiert, wenn du den Typ änderst? Willst du dann auch überall Namen ändern? Verwende einfach aussagekräftige Namen, dann ist meisten schon klar, wie die Objekte verwendet werden sollen.
ts7343 hat geschrieben:- sorry fuer den Betreff, hab ich nicht drueber nachgedacht, aber in der IT Branche ist das alles immer so verwurstelt mit den Anglismen, da muss man echt mal aufpassen, besonders wenn man mehr englisch schreibt/liest als deutsch ...
Seltsam, in der selben Branche arbeite ich auch. Und es kommt niemand auf die Idee zwischendurch die Sprache zu wechseln. Weder im Text noch spontan in einem Gespräch.
Sebastian
Re: string-to-list - how to avoid this help_list ...
Verfasst: Freitag 3. Dezember 2010, 14:41
von ts7343
@Xynon1:
- list-comprehensions, alles klar, da hab ich Wochenende gleich was zum lesen, thanks,
- Leerzeichen in Dateinamen, absolutes NOGO, das gehoert verboten, (wer hat das bloss eingefuehrt ..., das kann nur einer gewesen sein und der heisst Bill, oder?)
@EyDu:
Ja, ich komm von einer anderen Sprache wo wir auch Style Guides haben wo viele Sachen etwas anders sind als in PEP8. Aber PEP8 hab ich mir mal durchgeschaut, da muss ich noch so einiges aendern. Gibt es denn so etwas wie einen my_own_code to PEP8 converter? Der wuerde mich ja mal interessieren.
Den Typ einer Variable wuerde ich nicht aendern wollen, haette da irgendwie Angst vor Nebeneffekten.
Das ist schoen zu hoeren, dass es bei euch nicht so ein engl.-deutsches Durcheinander gibt, bei uns in einer amerikanischen Softwarefirma mit deutscher Niederlassung da wird schon mal:
"Ein conference call einberufen damit die Leute gebrieft werden um sich zum Bugfixing oder zum Betatesting zu committen"
aber ein Freund bin ich davon nicht, wenn dann dumme Angewohnheit!
Re: string-to-list - how to avoid this help_list ...
Verfasst: Freitag 3. Dezember 2010, 15:04
von mkesper
sma hat geschrieben:Unter der Annahme, dass die Dateinamen keine Leerzeichen enthalten
Kann man heutzutage vergessen.
Re: string-to-list - how to avoid this help_list ...
Verfasst: Freitag 3. Dezember 2010, 15:28
von gkuhl
Unicode sollte man auch beachten. Da "str.split" ansonsten einen TypeError wirft.
Re: string-to-list - how to avoid this help_list ...
Verfasst: Freitag 3. Dezember 2010, 21:03
von EyDu
ts7343 hat geschrieben:"Ein conference call einberufen damit die Leute gebrieft werden um sich zum Bugfixing oder zum Betatesting zu committen"
Bei Wörter finde ich das normal, nur bei Sätzen ist es mir noch nicht untergekommen. Aber genug von der unwichtigen Metadiskussion .
Eine automatische Umwandlung in PEP 8 ist mir nicht bekannt, ich habe auch nicht ernsthaft danach gesucht. An einigen Stellen würde dieser so oder so scheitern, da ein großer Teil der Namensgebung nicht automatisierbar ist. Mit pylint kann man zumindest in gewissen Grenzen auf Konformität testen.