Zerlegung mit Trennzeichen

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.
Benutzeravatar
xwastedyouthx
User
Beiträge: 27
Registriert: Montag 20. August 2007, 13:19

Montag 27. August 2007, 07:21

hallo zusammen,

ich versuche einzelne elemente aus einer ausgelesenen datei zu verarbeiten.
genauer gesagt dateinamen die wie folgt gespeichert sind

Code: Alles auswählen

['blabla.txt', 'test']
['blablablabla.txt', 'nocheine.txt']
['neuedatei.cpp']
hier steht jetzt jede zeile für einen ordner und dessen inhalt.
im ersten ordner sind also die dateien blabla.txt und test
im letzen neudatei.cpp

wir bekomme ich das[' am anfang und das '] am ende weg ?
wie zerlege ich dann eine zeile mit dem trennzeichen "," ?

stringzerlegung ist mir nur in der theorie ein begriff, wie ich das in python umsetze weiss ich leider nicht.

für euch ist das bestimmt ein kinderspiel. :roll:
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Montag 27. August 2007, 08:25

Dein Datenbeispiel scheint gültiges YAML und wohl auch JSON zu sein, mit einem entsprechenden Parser (z.B. PyYAML, simplejson) kannst du das also sauber und einfach einlesen.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Montag 27. August 2007, 08:27

Code: Alles auswählen

In [8]: line =  "['blabla.txt', 'test']"
In [9]: l = line.strip("[]") #Klammern weg
In [10]: files = l.split(", ") #Am Komma + Leerzeichen trennen
In [11]: files
Out[11]: ["'blabla.txt'", "'test'"]
In [15]: files2 = [i.strip("'") for i in files] #Hochkommata weg
In [16]: print files2
['blabla.txt', 'test']
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
BlackJack

Montag 27. August 2007, 09:44

Wobei sich mir die Frage stellt, wie die Daten in diesem Format in die Datei gekommen sind. Falls Du das selbst in der Hand hattest/hast wandle nicht einfach Listen in Zeichenketten um, sondern benutze das `csv`-Modul zum schreiben und lesen. Das spart eine Menge Arbeit, insbesondere wenn "komische" Zeichen in den Dateinamen vorkommen. Bei den meisten Dateisystemen ist zum Beispiel ein "newline" ein gültiges Zeichen in Dateinamen!
Benutzeravatar
xwastedyouthx
User
Beiträge: 27
Registriert: Montag 20. August 2007, 13:19

Montag 27. August 2007, 10:51

danke schonmal für die denkanstösse.
der tip von rebecca hat mich auf die richtige fährte gebracht.
durch strippen und replacen habe ich jetzt pro zeile einen datei-namen.

die datei lese ich ein mit os.walk

wie kann ich denn das ganze mit dem csv modul vereinfachen?
BlackJack

Montag 27. August 2007, 11:00

Mit `os.walk()` liest man keine Dateien. Also nochmal ganz langsam: Wo kommen die Daten her?

Zum `csv`-Modul gibt's eine Doku.
Benutzeravatar
xwastedyouthx
User
Beiträge: 27
Registriert: Montag 20. August 2007, 13:19

Montag 27. August 2007, 11:58

achso , ööhm, also mit dem os.walk lese ich alle dateinamen aus die in einem ordner sind, und diese werden dann eben in die datei geschrieben.

die ausgabe von dem os.walk() ist dann eben:
['bla.txt', 'blabla.txt']


usw.
The Spirit
User
Beiträge: 274
Registriert: Freitag 8. Juni 2007, 08:50
Wohnort: 84xxx Bereich
Kontaktdaten:

Montag 27. August 2007, 12:34

was willst du denn weiter mit den dateinamen machen?
benötigst du diese als variablen oder so in deinem script?
Benutzeravatar
xwastedyouthx
User
Beiträge: 27
Registriert: Montag 20. August 2007, 13:19

Montag 27. August 2007, 13:01

alle dateien mit einer bestimmten endung sollen geöffnet werden.
es soll dann nach einem bestimmten stichwort gesucht werden.
The Spirit
User
Beiträge: 274
Registriert: Freitag 8. Juni 2007, 08:50
Wohnort: 84xxx Bereich
Kontaktdaten:

Montag 27. August 2007, 13:30

xwastedyouthx hat geschrieben:alle dateien mit einer bestimmten endung sollen geöffnet werden.
es soll dann nach einem bestimmten stichwort gesucht werden.
nach einem stichwort in den files oder im dateinamen?
Benutzeravatar
xwastedyouthx
User
Beiträge: 27
Registriert: Montag 20. August 2007, 13:19

Montag 27. August 2007, 13:40

in den files!!
jede öffnen und nach dem stichwort suchen :)
und wenn das wort vorhanden ist den dateinamen ausgeben...
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 27. August 2007, 13:55

Wozu speicherst du denn dann die Ausgabe von ``os.walk()`` in einer Datei?

Du musst doch einfach nur ``os.walk()`` benutzen, dann die gefundenen Elemente durchiterieren und die Betreffenden dateien öffnen um darin zu suchen. Kein Bedarf irgendetwas in irgendwelche Dateien reinzuschreiben.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
xwastedyouthx
User
Beiträge: 27
Registriert: Montag 20. August 2007, 13:19

Montag 27. August 2007, 14:08

das problem ist, dass der os.walk pro ordner einen string ausgibt mit allen vorhandenen dateien. ich habe es bist jetzt nicht hinbekommen aus diesem einen die dateinamen zu seperieren.
als notbehelf habe ich das ganze jetzt so gestrickt das zuerst eine liste mit vorhandenen dateinamen erzeugt und in eine datei geschrieben wird.
jede zeile ist also eine datei!!!



also blutiger anfänger wusste ich mir nicht anders zu helfen.

für profi-tips bin ich natürlich offen :)
BlackJack

Montag 27. August 2007, 14:48

Der Profi-Tipp ist: Arbeite das Tutorial durch. `os.walk()` liefert dir keine Zeichenkette mit den Dateinamen sondern eine Liste.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Montag 27. August 2007, 16:33

Woher die Daten nun eigentlich kommen, hast du aber *immer* noch nicht offenbart, oder?
Antworten