Temporäre Datei mit Dateiverzeichnissen erstellen

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.
Gesperrt
marlened
User
Beiträge: 1
Registriert: Mittwoch 7. November 2012, 15:04

Mittwoch 7. November 2012, 16:40

Hallo,

ich möchte gerne eine temporäre Datei erstellen, in der eine Liste mit den Dateipfaden von allen .doc-Files ist. Ich habe unten den Code. Zunächst einmal habe ich alle Unterverzeichnisse von C:/Programme nach allen doc-Files durchsucht. Dann erstelle ich eine temporäre Datei, die dies beinhalten soll. Ich denke dass mein Fehler in der letzten Zeile liegt. Wäre schön, wenns mir jemand hier helfen kann.

Code: Alles auswählen

import os
for r,d,f in os.walk('C:/Programme/'):
    for files in f:
        if files.endswith('.doc'):

            import tempfile
            tmp = tempfile.TemporaryFile()
            tmp.write(os.path.join(r,files))
            tmp.seek(0)
            list = tmp.read()
Grüße marlene
Zuletzt geändert von Anonymous am Mittwoch 7. November 2012, 18:26, insgesamt 1-mal geändert.
Grund: Quelltext-Hervorhebung korrigiert
Benutzeravatar
StefanLawl
User
Beiträge: 92
Registriert: Donnerstag 7. Juni 2012, 20:23

Mittwoch 7. November 2012, 17:06

Hallo :)

Bitte den Code in python-Tags setzten (

Code: Alles auswählen

code[/ python][/b]). 

Wo liegt denn überhaupt das Problem?

Stefan
Man sagt uns wir sollen der Idee gedenken und nicht des Mannes. Denn ein Mensch kann versagen. Er kann gefangen werden. Er kann getötet und vergessen werden. Aber 400 Jahre später kann eine Idee immer noch die Welt verändern.
-V
ws
User
Beiträge: 65
Registriert: Freitag 16. Juni 2006, 13:19

Mittwoch 7. November 2012, 18:12

Hallo Marlene,

Dein Programm sollte wahrscheinlich etwa so aussehen:

Code: Alles auswählen

import os
for r,d,f in os.walk('C:/Programme/'):
    for files in f:
        if files.endswith('.doc'):

            import tempfile
            tmp = tempfile.TemporaryFile()
            tmp.write(os.path.join(r,files))
            tmp.seek(0)
list = tmp.read()
Vielleicht erstmal was zum Stil. Hinter Kommas sollte man immer ein Leerzeichen einfügen, das erhöht einfach die Lesbarkeit.
Dann ist es allgemein nicht schön, innerhalb einer Schleife import-Statements wie "import tempfile" einzubauen. Und es hilft auch, seine Variablennamen passend zu benennen, um nicht durcheinander zu kommen - f in Deinem Beispiel ist eine Liste von Dateien, files in Deinem Beispiel enthält genau eine Datei. Also wäre es besser, die Dateiliste files zu nennen und dann mit "for f in files" die Schleife zu schreiben.

Das Problem in Deinem Beispiel ist, dass Du in der Schleife jedesmal ein neues TemporaryFile erzeugst, aber Du willst wahrscheinlich alle gefundenen Dokumente in eine Datei schreiben. Du müsstest deshalb das TemporaryFile ausserhalb (vor) der Schleife erzeugen.

Gruß

Wolfgang
BlackJack

Mittwoch 7. November 2012, 19:22

@marlened: Das Programmstück und die Problembeschreibung sieht sehr ähnlich eines Beitrags aus, der noch nicht so lange her ist. Das scheint also eine Hausaufgabe zu sein. Bitte mal An alle Schüler und Studenten mit Informatikproblemen zur Einstimmung lesen.

Und dann erkläre mal was bei dem Quelltext passiert. Was wird dort Schritt für Schritt gemacht, was bewirkt jede einzelne Anweisung die ausgeführt wird, zu dem Zeitpunkt an dem sie ausgeführt wird, und macht das jeweils Sinn zu diesem Zeitpunkt.
BlackJack

Mittwoch 7. November 2012, 19:31

@marlened a.k.a. ernestovaya : Du könntest auch einfach in deiner Frage zum gleichen Thema letzte Woche (http://www.python-forum.de/viewtopic.php?f=1&t=30351) weitermachen und dort zum Beispiel auf die Rückfragen eingehen.

Es bringt auch nicht wirklich etwas sich diesmal mit einem weiblichen Vornamen als Benutzernamen anzumelden, das erhöht die Chancen Hausaufgabenlösungen zu erbetteln nicht wirklich. :twisted:
Gesperrt