string-to-list - how to avoid this help_list ...

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
ts7343
User
Beiträge: 69
Registriert: Mittwoch 5. Mai 2010, 13:48

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         
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

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.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Code: Alles auswählen

file_list = [f.strip() for f in string_of_files.split(';') if f.strip()]
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

yupp so meinte ich das :mrgreen:
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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
Das Leben ist wie ein Tennisball.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
Benutzeravatar
ts7343
User
Beiträge: 69
Registriert: Mittwoch 5. Mai 2010, 13:48

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 ...
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

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.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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
Das Leben ist wie ein Tennisball.
Benutzeravatar
ts7343
User
Beiträge: 69
Registriert: Mittwoch 5. Mai 2010, 13:48

@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!
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

sma hat geschrieben:Unter der Annahme, dass die Dateinamen keine Leerzeichen enthalten
Kann man heutzutage vergessen.
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Unicode sollte man auch beachten. Da "str.split" ansonsten einen TypeError wirft.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
Das Leben ist wie ein Tennisball.
Antworten