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

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

xwastedyouthx hat geschrieben:okeh, soweit so gut..alle gewünschten dateien sind in meiner liste.
jetzt muss ich nur noch die pfadangabe dazubekommen.
Jetzt ist zu spät. Du musst den Pfad dazuhängen, wenn du die Daten in die Liste reinsetzt, ansonsten geht der Pfad ja verloren.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
xwastedyouthx
User
Beiträge: 27
Registriert: Montag 20. August 2007, 13:19

ich hätte das ganze jetzt in eine zweite liste geschrieben sodass
folder[1] und datei[1] zusammenpassen.


aber wie ich beides zusammen in eine kriege weiss ich nicht.
habe schon mehrere möglichkeiten probiert, bekomme das nicht hin.

die pfadangabe kann ich mir anzeigen lassen, passt dann auch, aber sobald ich sie in eine liste oder sonstwas reinschreibe kommt da nur käse bei rum.
so wird es angezeigt.

Code: Alles auswählen

#hier mit print:
c:/test\test2\ddfggffdfd
#hier mit folders.extend(root)
['c', ':', '/', 't', 'e', 's', 't', 'c', ':', '/', 't', 'e', 's',
, 'e', 's', 't', '1', 'c', ':', '/', 't', 'e', 's', 't', '\\', 't'
', '1', '\\', 'a', 's', 'd', 'f', 'g', 'c', ':', '/', 't', 'e', 's
't', 'e', 's', 't', '2', 'c', ':', '/', 't', 'e', 's', 't', '\\',
 't', '2', '\\', 'd', 'd', 'f', 'g', 'g', 'f', 'f', 'd', 'f', 'd']
was hab ich denn jetzt wieder falsch gemacht bzw nicht bedacht?
BlackJack

Du hast `extend()` benutzt statt `append()`. `append()` hängt das Argument als *ein* Element an eine Liste, `extend()` hängt den die einzelnen Elemente des Arguments an eine Liste. Und eine Zeichenkette besteht nun mal aus einzelnen Buchstaben.

Zwei Datenstrukturen die sozusagen parallel laufen sollte man vermeiden. Wenn Daten zusammengehören sollte man sie auch in einer Datenstruktur halten. Also entweder Tupel von Pfadname und Dateinamen an die Liste anhängen oder gleich mit `os.path.join()` einen kompletten Dateinamen mit Pfad zusammensetzen und an die Liste anhängen.

So wie Du das möchtest müsste man sonst in die Pfad-Liste den gleichen Pfad so oft hineinstecken, wie man Dateinamen in der Liste hat.
Benutzeravatar
xwastedyouthx
User
Beiträge: 27
Registriert: Montag 20. August 2007, 13:19

so, folgendes habe ich jetzt zusammengestrickt:

Code: Alles auswählen


z = 0
# ordner inklusive unterordner durchsuchen nach files
for root, dirs, files in os.walk('c:/test'):
                                            
                                            
                                            liste.extend(files)
                                            dateiname = liste[z]
                                            fileandpath = os.path.join(root,dateiname)
                                            
                                           
                                            
                                            templist.append(fileandpath)
                                            
                                            z = z +1
os.walk schreib pro ordner in einem durchgang mehrere namen gleichzeitig in meine "liste" rein.
in die "templiste" sollen die infos mit pfadangabe. bei 5 mal auslesen habe ich dann teilweise 10 dateinamen, aber nur 5 pfadangaben, weil halt manchmal 2 in einem ordner sind.

ich vermute das ich einfach nur irgendwie anders counten muss damit es funktioniert. nicht pro durchgang sonder pro gefundenem eintrag.

aber wie. :(
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Der Vollständigkeit halber:

Code: Alles auswählen

>>> import yaml
>>> x = yaml.safe_load("['hallo.txt', 'du.txt', 'affe.txt']")
>>> x
['hallo.txt', 'du.txt', 'affe.txt']
>>> type(x)
<type 'list'>
Edit: Habe ich das richtig verstanden, dass du einfach nur die String-Repräsentation von Python-Listen in eine Datei geschrieben hast und diese wieder einlesen willst?
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

So sollte es gehen:

Code: Alles auswählen

liste = []

for root, dirs, files in os.walk("bla"):
    for f in files:
        liste.append(os.path.join(root, f))
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Benutzeravatar
xwastedyouthx
User
Beiträge: 27
Registriert: Montag 20. August 2007, 13:19

@ Rebecca
Danke, das ist genau das was ich gesucht habe.
funktioniert einwandfrei.


@Yogi:
wenn ich mal selber wüsste was ich will / wollte...


Danke an alle, habe viel gelernt!
Antworten