Seite 1 von 2

Verfasst: Dienstag 28. August 2007, 06:57
von xwastedyouthx
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)

Verfasst: Dienstag 28. August 2007, 07:00
von BlackJack
Was ist `i` in diesem Fall und bist Du sicher dass Du nicht einfach `append()` statt `insert()` benutzen kannst?

Verfasst: Dienstag 28. August 2007, 07:21
von xwastedyouthx
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.

Verfasst: Dienstag 28. August 2007, 07:45
von 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.

Verfasst: Dienstag 28. August 2007, 09:53
von xwastedyouthx
okeh, soweit so gut..alle gewünschten dateien sind in meiner liste.
jetzt muss ich nur noch die pfadangabe dazubekommen.

Verfasst: Dienstag 28. August 2007, 10:10
von Leonidas
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.

Verfasst: Dienstag 28. August 2007, 10:26
von xwastedyouthx
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?

Verfasst: Dienstag 28. August 2007, 10:38
von 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.

Verfasst: Dienstag 28. August 2007, 12:12
von xwastedyouthx
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. :(

Verfasst: Dienstag 28. August 2007, 15:44
von Y0Gi
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?

Verfasst: Dienstag 28. August 2007, 16:04
von Rebecca
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))

Verfasst: Mittwoch 29. August 2007, 07:09
von xwastedyouthx
@ 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!