Bestimmte Dateien an Funktion übergeben
Wo kaeme die denn vor? Ich zumindest sehe nix in der Aufgabe, die das erfordert. Und erst Recht nicht in deinem Code bis dato.
Grundsaetzlich iterierst du halt ueber die verschiedenen Dimensionen geschachtelt:
Grundsaetzlich iterierst du halt ueber die verschiedenen Dimensionen geschachtelt:
Code: Alles auswählen
for a in liste:
for b in a:
....
Was ich damit meine:
Ich habe eine Liste, die folgendermaßen aussieht:
list = [liste1, liste2]
hab's grade so probiert:
aber das funktioniert nicht, es kommt die Meldung:
Jemand einen Lösungsvorschlag?
Ich habe eine Liste, die folgendermaßen aussieht:
list = [liste1, liste2]
hab's grade so probiert:
Code: Alles auswählen
for wert1, wert2 in list:
print wert1
print wert2
Code: Alles auswählen
ValueError: too many values to unpack
Code: Alles auswählen
In [28]: lst
Out[28]: [[3, 4, 5], [6, 7, 8]]
In [29]: for a, b in zip(*lst):
....: print 'a: %d\tb: %s' % (a, b)
....:
a: 3 b: 6
a: 4 b: 7
a: 5 b: 8
Dann hast du falschen Code. Aber da du uns nicht zeigst, wie er aussieht, geschweige denn wie genau die Fehlermeldung ist (mit Stacktrace), koennen wir dir auch nicht helfen...
Code: Alles auswählen
lvm = glob.glob('/users/***/documents/Messungen/*/*.lvm')
verzeichnisse = []
dateinamen = []
for element in lvm:
verzeichnisse.append(os.path.dirname(element)) # fuegt den Pfad (ohne Dateinamen) zur Liste verzeichnisse hinzu
head, tail = os.path.split(os.path.dirname(element)) # splittet den Pfad auf, sodass nur der letzte Teil (und damit der Name des Ordners ueber der Datei) gespeichert wird
dateinamen.append(tail) # fuegt den letzten Teil (tail) an die Liste dateinamen an
dateinamen2=list(sorted(set(dateinamen))) # Haut doppelte Datensätze raus und sortiert sie (ist einfach schöner beim debuggen)
verzeichnisse2=list(sorted(set(verzeichnisse))) # dito.
for ausgabe in verzeichnisse2:
plot(os.path.join(ausgabe, 'messung 1.lvm'), os.path.join(ausgabe, 'messung2.lvm'), os.path.join(dateinamen2, '.pdf') # Syntax für plot() = plot(Dateiname Messdatei 1, Dateiname Messdatei 2, Ausgabedateiname)
Fällt einem da was ein?
Zuletzt geändert von Anonymous am Dienstag 4. Oktober 2011, 21:24, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
Grund: Quelltext in Python-Code-Tags gesetzt.
Der Code ist zwar alles andere als professionell, ebenso wie die Kommentierung; funktionieren tut er, bis auf die automatische Dateinamenszuweisung...
Kann mir da jemand helfen? Auch Anmerkungen zur Performance sind erwünscht
Danke
Kann mir da jemand helfen? Auch Anmerkungen zur Performance sind erwünscht

Danke

Wer sich Muehe gibt, soll belohnt werden 
Deine Implementierung ist zu unflexibel, und arbeitet vom falschen Ende her. Du solltest das Problem lieber so rum angehen:
- wenn ein Verzeichnis gegeben wird, pruefe, ob in dem Verzeichnis die benoetigten Dateien enthaelt, dann prozessiere es
- iteriere ueber alle Verzeichnisse ausgehend von einem Basisverzeichnis, und pruefe fuer jedes, ob es ein "gutes" ist.

Deine Implementierung ist zu unflexibel, und arbeitet vom falschen Ende her. Du solltest das Problem lieber so rum angehen:
- wenn ein Verzeichnis gegeben wird, pruefe, ob in dem Verzeichnis die benoetigten Dateien enthaelt, dann prozessiere es
- iteriere ueber alle Verzeichnisse ausgehend von einem Basisverzeichnis, und pruefe fuer jedes, ob es ein "gutes" ist.
Code: Alles auswählen
import os
def tuwas(d):
print "ich tu mal so als ob ich was tu im verzeichnis", d
def verzeichnis_ist_ok(d):
return all(
os.path.exists(
os.path.join(d, "messung %i.lvm" % i)
)
for i in xrange(1, 3))
def arbeite(d):
for root, dirs, files in os.walk(d):
for dir_ in dirs:
dir_ = os.path.join(root, dir_)
if verzeichnis_ist_ok(dir_):
tuwas(dir_)
def test():
os.chdir("/tmp")
if not os.path.exists("ok"):
os.mkdir("ok")
for name in ["messung 1.lvm", "messung 2.lvm"]:
fname = os.path.join("ok", name)
if not os.path.exists(fname):
with open(fname, "w") as outf:
outf.write("test")
assert verzeichnis_ist_ok("ok")
if not os.path.exists("nicht_ok"):
os.mkdir("nicht_ok")
assert not verzeichnis_ist_ok("nicht_ok")
if __name__ == "__main__":
test()
arbeite("/tmp")
@Lateiner: Ohne Syntaxhervorhebung war das unlesbar — mit wird es nur geringfügig besser. Diese unendlich langen Kommantare an den Zeilenenden sind sehr unübersichtlich.
Das erscheint mir das alles ziemlich wirr und wenn das funktioniert, dann wahrscheinlich nur zufällig. Durch das sortieren der Namen und Pfade müsste doch sämtliche Zuordnung dahin sein!? Und für's Plotten nimmst Du feste Dateinamen und versuchst für den PDF-Namen dann eine Liste mit Dateinamen und eine Endung zusammen zu fügen!? Was sollte denn dabei heraus kommen!?
Das erscheint mir das alles ziemlich wirr und wenn das funktioniert, dann wahrscheinlich nur zufällig. Durch das sortieren der Namen und Pfade müsste doch sämtliche Zuordnung dahin sein!? Und für's Plotten nimmst Du feste Dateinamen und versuchst für den PDF-Namen dann eine Liste mit Dateinamen und eine Endung zusammen zu fügen!? Was sollte denn dabei heraus kommen!?
Also, ich erkläre mal im Folgenden, warum ich das Programm so geschrieben habe wie ich's getan habe:
Ich bekomme als Input von einem Kollegen die Messdaten per Stick oder Mail. Es handelt sich hierbei um ein zip-Archiv, das ungefähr so aussieht:
Messung 1 ist stets eine Kurzbeschreibung des jeweiligen Versuchs. Damit wir nicht den Überblick verlieren, liegt es nahe, dass die ausgegebene pdf auch so heißt wie der Ordner.
Dass die Programmstruktur nicht ganz logisch ist, liegt daran, dass ich einfach 1:1 meine Arbeitsschritte in Programmcode überführt habe - insofern nicht völlig zufällig, aber zum Teil ja
@deets: Danke für Deine Mühe
Probiere es sofort mal aus 
Danke an alle,
Lateiner
P.S.: Nächstes Mal denke ich an das Syntaxhighlighting
Ich bekomme als Input von einem Kollegen die Messdaten per Stick oder Mail. Es handelt sich hierbei um ein zip-Archiv, das ungefähr so aussieht:
Code: Alles auswählen
Messung 1
- messung1.lvm
- messung2.lvm
Messung 2
...
Dass die Programmstruktur nicht ganz logisch ist, liegt daran, dass ich einfach 1:1 meine Arbeitsschritte in Programmcode überführt habe - insofern nicht völlig zufällig, aber zum Teil ja

@deets: Danke für Deine Mühe


Danke an alle,
Lateiner
P.S.: Nächstes Mal denke ich an das Syntaxhighlighting
