Seite 1 von 2

Bestimmte Dateien an Funktion übergeben

Verfasst: Dienstag 4. Oktober 2011, 13:56
von Lateiner
Ja, ich weiß, dass es zu ähnlichen Themen schon x-Threads gab, aber ich brat mir mal ne Extrawurst...

Also ich habe eine kleine Funktion geschrieben, welche mir Messdaten zerhäckselt (=auswertet und plottet; danke nochmal an alle die mir beim Schreiben dafür geholfen haben :) );
einer der Eingabeparameter ist klugerweise der Dateiname der zu verarbeitenden Datei. Da nun die Anzahl der Dateien ins "Unermessliche" steigt (über hundert... :? ), will ich nun, dass die Funktion so oft aufgerufen wird, bis alle Dateien eines Typs (.lvm) abgearbeitet wurden.
Wie organisiere ich das mit dem Funktionsaufruf?

Re: Bestimmte Dateien an Funktion übergeben

Verfasst: Dienstag 4. Oktober 2011, 13:57
von deets
Schau dir mal das Modul os an, und da zB os.listdir, oder os.walk, sowie das Modul glob.

Re: Bestimmte Dateien an Funktion übergeben

Verfasst: Dienstag 4. Oktober 2011, 14:00
von Lateiner
Und wie filtere ich da nach Dateiendungen?
Hier im forum habe ich den Ansatz per Suche gefunden:

Code: Alles auswählen

def verzeichnisse_einlesen():
    """Verzeichnisse des gewaehlten Verzeichnisses einlesen"""
    verzeichnisse = os.listdir('/users/***/documents/Messungen')
    return sorted(verzeichnisse)

anzeigen = verzeichnisse_einlesen()

elemente = len(anzeigen)
listen_zaehler = 0
listen_zaehler += 1

while listen_zaehler != elemente:
    listen_zaehler += 1
    anzeigen = verzeichnisse_einlesen()

print anzeigen

Der rotzt mir nur alle Dateien raus... ein wenig viel ;) Wie selektiere ich da?

Re: Bestimmte Dateien an Funktion übergeben

Verfasst: Dienstag 4. Oktober 2011, 14:03
von Lateiner
Schon mal besser ist der Ansatz hier:

Code: Alles auswählen

dirList=os.listdir('/users/***/documents/Messung')
for fname in dirList:
     print fname
Der spuckt mir pro Aufruf des Befehls print jeweils einen Dateinamen aus.
Wenn man's jetzt quik'n'dirty machen will, kann ich das print einfach durch ne if-Abfrage ersetzen, die die Dateiendung prüft und wenn sie korrekt ist die Funktion lädt...

Re: Bestimmte Dateien an Funktion übergeben

Verfasst: Dienstag 4. Oktober 2011, 14:04
von Lateiner
Ist das empfehlenswert?

Re: Bestimmte Dateien an Funktion übergeben

Verfasst: Dienstag 4. Oktober 2011, 14:18
von deets
Schau dir nochmal genau die Doku an fuer os und os.path - vor allem zB sowas wie splitext. Oder eben das Modul glob.

Re: Bestimmte Dateien an Funktion übergeben

Verfasst: Dienstag 4. Oktober 2011, 14:25
von Lateiner
Aber auch damit ist mir, wie mir grade einfällt, nicht zu helfen...
Denn:

Code: Alles auswählen

- Messung 1
        - Datei1.lvm
        - Datei2.lvm
        - Datei3.lvm
- Messung 2
        - Datei1.lvm
        - Datei2.lvm
        - Datei3.lvm
jeweils ein Verzeichnis enthält eine Messung, die in zwei Dateien gesplittet wurden (nicht mein Fehler, aber is halt leider so) und die unbedingt zusammen geplottet werden müssten...
Nicht mehr ganz so trivial :?

Re: Bestimmte Dateien an Funktion übergeben

Verfasst: Dienstag 4. Oktober 2011, 14:30
von BlackJack
@Lateiner: In zwei Dateien? Ich sehe da drei in jedem Verzeichnis…

Re: Bestimmte Dateien an Funktion übergeben

Verfasst: Dienstag 4. Oktober 2011, 14:38
von Lateiner
Man müsste theoretisch alle Verzeichnisse daraufhin untersuchen, ob sie lvm-Dateien enthalten und dann schließlich (da die Dateinamen immer gleich und bekannt sind) einfach durch Voreinstellung in die Funktion übergeben.

Mein erster Ansatz wäre alle Unterverzeichnisse des Verzeichnisses aufzurufen und auf das Vorhandensein der beiden Dateien zu überprüfen, diese an die Funktion zu übergeben und dann das nächste Verzeichnis aufzurufen usw...
Das is ein wenig kompliziert, findet ihr nicht? Gibt es da keinen einfacheren Weg?

Re: Bestimmte Dateien an Funktion übergeben

Verfasst: Dienstag 4. Oktober 2011, 14:39
von Lateiner
Upsala, da müssten eigentlich zwei Dateien sein, habe aber aus Versehen drei hingeschrieben. Tütet mir leid :)

Re: Bestimmte Dateien an Funktion übergeben

Verfasst: Dienstag 4. Oktober 2011, 14:57
von deets
Nein, da gibt es keinen einfacheren Weg, weil es nunmal das ist, was das Kriterium fuer die Dateiauswahl ist.

Re: Bestimmte Dateien an Funktion übergeben

Verfasst: Dienstag 4. Oktober 2011, 14:59
von Lateiner
Gibt es da keine Python-eigene Funktion, die einem das etwas bequemer und schneller erledigt...?

Re: Bestimmte Dateien an Funktion übergeben

Verfasst: Dienstag 4. Oktober 2011, 15:07
von deets
Jetzt wo du's sagst:

Code: Alles auswählen

from solve import my_problem

my_problem()
Mal im Ernst: das was du da beschreibst, sind 3 Zeilen Python-Code. Wenn dir das schon zu viel ist, dann solltest du ueberlegen, ob Programmieren das Richtige fuer dich ist.

Re: Bestimmte Dateien an Funktion übergeben

Verfasst: Dienstag 4. Oktober 2011, 15:19
von Lateiner
Och nö, nich schon wieder die olle kiste...
Ich programmiere eigentlich schon seit langem (andere Sprachen) und habe auch schon größere Projekte realisiert.
Dabei habe ich mir meist selbst geholfen, die Programme haben immer funktioniert, nur waren sie meist nicht performant... als ich den Quelltest mal einem gezeigt habe, der davon was verstanden hat, der schlug die Hände überm Kopf zusammen und empfahl mir, nocheinmal alles zu vergessen und neu anzufangen. Das trifft sich gut, da ich heute neue Anforderungen habe, die ich mithilfe von neuen Sprachen und Konzepten umzusetzen versuche.
Dass mir die Arbeit zu viel ist, "drei Zeilen Code" zu tippen, halte ich für etwas an der Realität vorbei... ich mache es ja de facto auch, jedoch sind die "Fremdlösungen" aufgrund von den vielen Jahren Python-Erfahrung der entsprechenden Personen meist eleganter und performanter. Sonst würde ich mich hier nicht so zum Deppen machen...

Re: Bestimmte Dateien an Funktion übergeben

Verfasst: Dienstag 4. Oktober 2011, 15:30
von deets
Wenn du schon Programmiererfahrung hast, dann wundere ich mich, weshalb du glaubst, es gaebe etwas deutlich einfacheres als das, was Python schon bietet. Denn Aufgabe einer Programmiersprache und deren Standardbibliothek ist es nicht, alle moeglichen Spezialfaelle - und das ist deiner ja nunmal - zu antizipieren, und in eine vorgefertigte Loesung zu giessen. Das geht halt nicht.

Sonder Abstraktionen zu bieten, die einfach und maechtig sind, und mit denen man dann etwas zusammenbauen kann.

Und alle von mir genannten Bibliotheksfunktionen sind das, was man zur Loesung dieses Problems benutzt. Wenn du damit eine Loesung gestrickt hast, dann kann man die vielleicht auf einen Mangel an Eleganz hin nochmal hier vorstellen und ggf. verbessern.

Re: Bestimmte Dateien an Funktion übergeben

Verfasst: Dienstag 4. Oktober 2011, 15:59
von Lateiner
habe ein kleines Problem mit glob.glob:
wenn ich eingebe

Code: Alles auswählen

print glob.glob('users/***/documents/python/*.py')
kommt da lediglich Komisch... habe das aus Dive into Python und da soll das eigentlich alle Python-Dateien eines Verzeichnisses zurückgeben... habe Python 2.7 64 bit Mac OS X Snow Leopard

Re: Bestimmte Dateien an Funktion übergeben

Verfasst: Dienstag 4. Oktober 2011, 16:02
von deets
Da fehlt ein Slash am Anfang..

Re: Bestimmte Dateien an Funktion übergeben

Verfasst: Dienstag 4. Oktober 2011, 16:03
von Lateiner
Ups. Danke :)

Re: Bestimmte Dateien an Funktion übergeben

Verfasst: Dienstag 4. Oktober 2011, 16:05
von Lateiner

Code: Alles auswählen

print glob.glob('/*/*.py')
Das hier funktioniert nun auch. Wie kann ich es so gestalten, dass die Verzeichnistiefe, in dem die Dateien liegen, egal sind und einfach alles durchsucht wird, bis in die letzten Ecken? :wink:

Re: Bestimmte Dateien an Funktion übergeben

Verfasst: Dienstag 4. Oktober 2011, 16:10
von BlackJack
@Lateiner: Da würde ich nicht mehr `glob()` für verwenden, sondern `os.walk()`. Vielleicht in Verbindung mit `fnmatch.filter()`.