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

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

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:

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

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

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

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

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: 276
Registriert: Freitag 8. Juni 2007, 08:50
Wohnort: 84xxx Bereich
Kontaktdaten:

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

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

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

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

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

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

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

Woher die Daten nun eigentlich kommen, hast du aber *immer* noch nicht offenbart, oder?
Benutzeravatar
xwastedyouthx
User
Beiträge: 27
Registriert: Montag 20. August 2007, 13:19

hmm.ich glaube ich hab sogar eine liste.
warum ich die bisher nicht benutzt habe weiss ich auch nicht. :)
muss ich gleich mal probieren.


daher kommen die daten:

Code: Alles auswählen

for root, dirs, files in os.walk('c:/test'):

                                                       liste.insert(i,files)
BlackJack

Was ist `i` in diesem Fall und bist Du sicher dass Du nicht einfach `append()` statt `insert()` benutzen kannst?
Benutzeravatar
xwastedyouthx
User
Beiträge: 27
Registriert: Montag 20. August 2007, 13:19

das i war mein counter, aber der fällt jetzt mit append weg. danke

nun habe ich aber pro eintrag in der liste zeilen die zb so aussehen:

Code: Alles auswählen


['hallo.txt', 'du.txt', 'affe.txt']

ich brauch aber die dateien einzeln.

jeder eintrag in diser zeile sollte eigentlich ein eintrag in einer liste sein:
hallo.txt also erster eintrag
du.txt als zweiter
affe.txt als dritter.
BlackJack

Das was Du da hast *ist* eine Liste mit den geforderten Eigenschaften.

Falls Du keine Liste mit Listen, sondern eine Liste mit allen Dateinamen haben möchtest, dann suchst Du `extend()` statt `append()`.

Die Namen haben alle keine Pfadinformation, eventuell solltest Du mit `os.path.join()` den Pfad (`root`) zu den Dateien vor den Namen hängen.
Benutzeravatar
xwastedyouthx
User
Beiträge: 27
Registriert: Montag 20. August 2007, 13:19

okeh, soweit so gut..alle gewünschten dateien sind in meiner liste.
jetzt muss ich nur noch die pfadangabe dazubekommen.
Antworten