Seite 1 von 1
Ordnerstrukturen geschickt abbilden in nem Python-Script?
Verfasst: Montag 18. April 2016, 09:47
von shakebox
Servus!
Bin in der Filmbranche taetig und moechte gerade ein Script, das bisher als reines Bash-Shellscript vorliegt, in Python nachbauen, damit man es auch universeller einsetzen kann und es auch besser wartbar und plattformuebergreifender nutzbar ist.
Dieses Script erzeugt abhaengig von wenigen Parametern eine Ordner/Unterordner-Struktur fuer einzelne Filmshots, die nur an wenigen Stellen jeweils abweicht. Hauptunterschied ist der Name des Shotordners. Also sowas hier:
Code: Alles auswählen
Shot001
|__Folder01
|__Folder02
| |__Subfolder01
| |__Subfolder02
|__Folder03
In dem Shellscript wird sowas ganz einfach, aber unuebersichtlich und arg redundant geloest nach dem Motto:
Code: Alles auswählen
mkdir $shotfolder
cd $shotfolder
mkdir Folder01
mkdir Folder02
mkdir Folder02/Subfolder01
mkdir Folder02/Subfolder02
mkdir Folder03
In Python wuerde ich das ganze eigentlich nun gerne ganz oben im Script irgendwie moeglichst uebersichtlich und kompakt abbilden, damit man die Struktur sehr einfach erfassen und vor allem erweitern kann bei Bedarf. Da meine Python-Kenntnisse leider nachwievor recht rudimentaer sind, fehlt mir da immer der Ueberblick, wie man sowas in Python moeglichst elegant loest. Verwendet man da eher verschachtelte Listen oder Dictionaries oder noch andere Strukturen? Irgendwie muss ich es ja zu nem Objekt zusammenfassen, ueber das ich dann irgendwie iterieren (?) kann und so in einem Rutsch dann alle Ordner anlegen.
Danke fuer Tipps und Anstoesse in die richtige Richtung!
Re: Ordnerstrukturen geschickt abbilden in nem Python-Script?
Verfasst: Montag 18. April 2016, 10:46
von shakebox
gerade gesehen, dass ich die Frage selbst schonmal gestellt habe, und zwar 2009:
viewtopic.php?f=1&t=18845
Peinlich, aber seitdem hatte sich leider nix mehr getan mit diesem Script und ich war mit ganz anderen Sachen beschaeftigt.
Von daher kann man diesen Beitrag hier auch wieder loeschen, ich darf es selbst aus irgendwelchen Gruenden nicht, obwohl noch niemand geantwortet hatte.
Re: Ordnerstrukturen geschickt abbilden in nem Python-Script?
Verfasst: Montag 18. April 2016, 10:49
von Sirius3
@shakebox: Dich stört also die Redundanz in den Subfoldern? An einer Verschachtelung über Wörterbücher oder Tuples würde mich der Schreiboverhead mehr stören:
Code: Alles auswählen
FOLDERS = [
('Folder01', []),
('Folder02', [
('Subfolder01', []),
('Subfolder02', []),
]),
('Folder03', []),
]
oder die unschöne Fallunterscheidung nach Typ:
Code: Alles auswählen
FOLDERS = [
'Folder01',
('Folder02', [
'Subfolder01',
'Subfolder02',
]),
'Folder03',
]
Alternativ kann man auch die Hierarchie durch Striche kennzeichnen:
Code: Alles auswählen
FOLDERS = [
'Folder01',
'Folder02',
'-Subfolder01',
'-Subfolder02',
'--Subsubfolder01',
'Folder03',
]
Re: Ordnerstrukturen geschickt abbilden in nem Python-Script?
Verfasst: Montag 18. April 2016, 10:56
von shakebox
Danke Sirius fuer die Gedanken. Ja, gute Frage, warum ich das eigentlich machen will. Idee war vermutlich, dass moeglichst auch mal jemand hier, der noch weniger Python kann als ich, da zur Not nen fehlenden Ordner/Unterordner hinzufuegen kann, ohne dass gleich das ganze Script nicht mehr funktioniert, weil jemand ein Komma am Zeilenende vergisst oder die Einrueckung falsch macht oder so.
Vermutlich ist das das, was man sonst durch "Template"-Loesungen loest!? Hab damit aber auch keine Erfahrung.
Vielleicht ist ne klare os.mkdir()-Struktur doch das Einfachste!?
Re: Ordnerstrukturen geschickt abbilden in nem Python-Script?
Verfasst: Montag 18. April 2016, 18:20
von hans
shakebox hat geschrieben:... dass moeglichst auch mal jemand hier, der noch weniger Python kann als ich, da zur Not nen fehlenden Ordner/Unterordner hinzufuegen kann, ohne dass gleich das ganze Script nicht mehr funktioniert
Den Ordner anzulegen (mit os.mkdir()) ist das kleinste Problem. An das Script würde ich keinen heran lassen. Ich würde für den Anwender eine GUI vorschalten, wo er die Ordner eintragen kann. Euer Standardschema kann man vorgeben. Als Eingabemaske denke ich an eine Tabellenstruktur a la Excel / Open Office Calc. Ich würde die Tabelle so füllen (ich bediene mich mal der Excel Notation)
Code: Alles auswählen
shotfolder=a1
Folder01=b2
Folder02=b3
Subfolder01=c4
Subfolder02=c5
Folder03=b6
Im günstigsten Fall hat der Anwender lediglich den Shotfolder zu definieren. Der Ordner in dem die Struktur erzeugt wird, ist immer gleich?
Re: Ordnerstrukturen geschickt abbilden in nem Python-Script?
Verfasst: Montag 18. April 2016, 18:51
von BlackJack
@hans: Ich würde Anwender auch eher nicht an das Programm selbst lassen, aber eine excelartige GUI ist dann vielleicht doch ein wenig zu heftig. Eine einfache Textdatei mit der Ordnerstruktur wo die Beziehungen durch Einrückung oder wie schon vorgeschlagen durch '-'-Zeichen gekennzeichnet ist, tut es auch.
@shakebox: Man könnte auch schauen was es in dem Bereich bereits gibt. Kurze Suche hat beispielsweise das hier zutage gebracht:
https://github.com/robmoggach/python-dirtt
XML und Cheetah wäre jetzt nicht so meins, ich fänd JSON oder YAML und Jinja2 sympathischer, aber vielleicht gibt es da ja auch bereits etwas.
Re: Ordnerstrukturen geschickt abbilden in nem Python-Script?
Verfasst: Montag 18. April 2016, 19:33
von hans
BlackJack hat geschrieben:einfache Textdatei mit der Ordnerstruktur wo die Beziehungen durch Einrückung oder wie schon vorgeschlagen durch '-'-Zeichen gekennzeichnet ist, tut es auch.
Auch damit sind so manche Mitarbeiter überfordert

Aber klar, das ist natürlich wesentlich einfacher zu programmieren.
Re: Ordnerstrukturen geschickt abbilden in nem Python-Script?
Verfasst: Montag 18. April 2016, 19:54
von BlackJack
@hans: Das hat nichts damit zu tun wie kompliziert oder einfach die Programmierung ist, sondern wie umständlich man es für denjenigen machen möchte der das bedienen muss. Wenn Du das schon in eine GUI giessen möchtest, dann doch bitte keine *Tabelle* für eine *Baumstruktur*. Für Baumstrukturen gibt es eigene Widgets in den meisten GUI-Rahmenwerken die wesentlich besser die Struktur der Daten abbilden ohne das der Benutzer so viel falsches eingeben kann wie bei einer Tabelle wo die Mehrzahl der Zellen leer bleibt und auch leer bleiben muss.
Jemand der eine Baumstruktur in Textform mit Einrückung nicht hinbekommt, der wird auch mit einer zweidimensionalen Tabelle überfordert sein. Und in beiden Fällen möchte man solche Leute vielleicht besser keine Ordnerstrukturen definieren/erstellen lassen.

Re: Ordnerstrukturen geschickt abbilden in nem Python-Script?
Verfasst: Montag 18. April 2016, 20:28
von nezzcarth
Statt einer verschachtelten Struktur, die die Hierarchie abbildet, könnte man auch mal überlegen, wie weit man hier mit 2er Tupeln aus einem über- und einem untergeordneten Element kommt.
Also gewissermaßen so (angelehnt an DOT/Graphviz; im Grunde ist eine Ordnerstruktur ja ein gerichteter Graph, oder?):
Code: Alles auswählen
shoot001 -> Folder01
shoot001 -> Folder02
shoot001 -> Folder03
Folder02 -> Subfolder01
Folder02 -> Subfolder02
Ob das klappt, hängt auch ein bisschen von der spezifischen Struktur ab, d.h. ob wirklich alle gleichnamigen Ordner jeweils auch dieselbe Unterstruktur haben sollen. Falls das nicht gewollt ist, wird es etwas komplizierter (dann müsste man mit IDs und Labels oder so arbeiten), was diese Variante wohl (abgesehen von der leichten Redundanz) unattraktiver macht.
Re: Ordnerstrukturen geschickt abbilden in nem Python-Script?
Verfasst: Freitag 22. April 2016, 11:18
von shakebox
Danke Euch allerseits!
Aktuell ist glaub die Idee mit '-'-Zeichen die sinnvollste in Sachen Aufwand/Nutzen-Verhaeltnis.
Es ging auch nicht drum, dass jeder User das anpassen kann, sondern auch in meiner Abwesenheit einige wenige Kollegen das evtl. bei Bedarf mal anpassen/ergaenzen koennen, ohne dass sie zuviel Ahnung von Python haben muessen.