Hallo Community!
Ich bin zwar grade frisch registriert, habe jedoch schon oft Lösungen zu meinen Problemen hier gefunden. Da ich dieses Mal nichts gefunden habe, habe ich mich entschlossen, mich selbst anzumelden und direkt mein Problem beschreiben.
Zuallerst: Ich habe erst vor kurzem begonnen Python zu Programmieren, habe aber bereits ein gutes Bild von Python und kann schon recht flüssig Code schreiben. Erfahrungen habe ich bereits mit Java (Uni) und Visual Basic (Arbeit) gesammelt.
Noch mein System, bevor ich zum Problem komme:
Python 2.6 (32bit)
Pywin32 Build 214
läuft auf:
Windows 7 build 7100 (64bit)
Außerdem hab ich noch die Möglichkeit auf ein
Win XP Pro SP3 (32bit) und Windows Server 2003 SP2 (32bit)
auszweichen.
Zu meinem Problem:
Ich versuche seit geraumer Zeit bestimmte Informationen an Dateien anzuhängen. Ich arbeite nämlich an einem Datenbanksystem (genauer: ein Produktdatenmanagementsystem), inin welches ich Dateien importieren muss.
Diese Dateien liegen in einer bestimmten Ordnerstruktur, die jeweils Ober- und Untermodule repräsentiert.
Ich habe bereits ein Pythonprogramm erstellt, welches diese Informationen für jede Datei auslesen kann.
Diese Informationen sollen nun im Datenbanksystem abgebildet werden. Normalerweise beginnen die Dateien mit zwei Nummern, die die Module repräsentieren. Normalerweise... Es gibt viele Leute, die die Dateien nicht so abgespeichert haben, sodass ich auf den Pfad als Informationsquelle zurückgreifen musste.
Das Datenbanksystem nimmt von der Ursprünglichen Datei nur den Dateinamen als Information mit (und diverses anderes Zeugs, das mir nichts nützt).
Nun habe ich bereits versucht über das Schreiben und Lesen von Dateieigenschaften, diese Informationen den Dateien mitzugeben. Leider löscht das Datebanksystem diese Dateiegenschaften (wahrscheinlich weil es mit dem ADS von NTFS nicht umgehen kann). D.h. ich kann nach einem Import in das System nicht mehr auf die von mir gesetzten Attribute zurückgreifen.
Auf der Suche nach einer weiteren Lösung ist mir eingefallen, dass ich ja vielleicht hinter das "End of File"-Signal einer Datei ein paar Byte anhängen könnte, die ich später (nach dem Import) wieder auslese und lösche.
Ist das Schreiben, bzw. Lesen hinter dem EOF-Signal überhaupt möglich ohne die Dateiintigrität zu zerstören?
Haben alle Dateitypen ein EOF-Signal (Hauptsächlich arbeite ich mit CATIA- - also CAD-Daten)?
Weiß jemand eine andere Möglichkeit, Dateien mit zusätzlichen Informationen auszustatten?
Ach ja: Das temporär Umbenennen von Dateien um die Informationen mitzugeben ist leider ausgeschlossen. Das CAD-Programm findet nämlich ansonsten die einzelnen Teile der Baugruppe nicht mehr. Importiert wird über das CAD-Programm. Das heißt, dass ich die Dateien öffnen muss und dann mittels CAD-Prog. importieren. Das geht natürlich nicht, wenn auf einmal Alle Datein anders heißen.
Vielleicht gibts jemanden mit einer zündenden Idee!?
Chris
Problem: Dateieigenschaften, etc.
Mit freundlichen Grüßen,
Chris
Chris
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Um ehrlich zu sein, verstehe ich die Frage nicht so wirklich. Woran hapert es präzise? Du scheinst Infos aus Dateinamen und Dateipfad zu benötigen. Dafür gibt es doch genügend Funktionen z.B. im os Modul.
Ich denke Du müßtest mal ein Beispiel geben und Deine Frage präzisieren.
Kann natürlich auch sein, dass ich einfach nur nen Brett vorm Kopf habe und als einziger die Frage nicht ganz kapiert
Ich denke Du müßtest mal ein Beispiel geben und Deine Frage präzisieren.
Kann natürlich auch sein, dass ich einfach nur nen Brett vorm Kopf habe und als einziger die Frage nicht ganz kapiert

Das kann ich schonmal ausschließen...Kann natürlich auch sein, dass ich einfach nur nen Brett vorm Kopf habe und als einziger die Frage nicht ganz kapiert
Unabhängig davon ist das anhängen von Daten an das Ende einer Datei eine extrem schlechte Idee. Ich glaube mit dem EOF bringst du so einiges durcheinander. Eine Datei kann "beliebige Bytes " enthalten. Es gibt kein universelles Zeichen welches in der Datei am Ende stehen würde und hinter das auch noch geschrieben werden kann. Vielleicht dazu:http://de.wikipedia.org/wiki/Steuerzeichen, http://de.wikipedia.org/wiki/End_of_File
Du suchst evtl. Hashes mit denen du eine Datei schnell indizieren kannst.
Wie Hyperion schon sagte: Gib lieber ein konkretes Beispiel.
MFG HerrHagen
Gut: Hier noch mal in aller kürze:
Es gibt Dateien wie z.B.:
Ursprungsordner\01_DRIVETAIN\3D-DATA\01_04_DRIFASHAFT\eindateiname.CATPart
Aus diesem Pfad extrahiere ich die Information "01" und "04". Nun muss die Datei in ein Datenbanksystem importiert werden. Dazu liest dieses System die Datei ein und speichert es in einem (mir zugänlgichen) E-Vault unter einem standardisierten Dokumentenschlüssel ab.
Wenn ich die vorher extrahierten Informationen als Dateieigenschaften an die Datei anhänge (was mir bereits gelungen ist) und ich die Datei dann importiere, gehen diese Eigenschaften wieder verloren.
Ich kann also im E-Vault die vorhandenen Dateien nicht mehr nach den von mir gesetzten Infos durchforsten. Im Datenbanksystem befinden sich außer dem ursprünglichen Dateinamen (also NICHT der Pfad, aus dem ich meine Infos beziehen könnte) keine nützlichen Informationen.
Nun habe ich mich gefragt, ob ich nicht hinter das EOF-Bit schreiben könnte und den Dateien so meine Infos mitgeben...
Mein Problem also noch Mal in einem Satz:
Ich suche eine Möglichkeit, Dateien mit Informationen auszustatten, die ich über den Ursprungspfad generiere, wobei im Prinzip auch die Zuweisung einer eindeutigen ID auch funktionieren würde, welche sich jedoch nicht im Dateinamen oder in den Dateieigenschaften wiederspiegeln kann (da die Eigenschaften ja gelöscht werden).
Schematisch:
Datei -> Infos extrahieren -> Infos anhängen (hier liegt mein Problem) -> Importieren ins DB-System -> Infos auslesen und in die DB schreiben
Ich hoffe ich habe etwas Klarheit in die Angelegenheit gebracht.
Chris
Es gibt Dateien wie z.B.:
Ursprungsordner\01_DRIVETAIN\3D-DATA\01_04_DRIFASHAFT\eindateiname.CATPart
Aus diesem Pfad extrahiere ich die Information "01" und "04". Nun muss die Datei in ein Datenbanksystem importiert werden. Dazu liest dieses System die Datei ein und speichert es in einem (mir zugänlgichen) E-Vault unter einem standardisierten Dokumentenschlüssel ab.
Wenn ich die vorher extrahierten Informationen als Dateieigenschaften an die Datei anhänge (was mir bereits gelungen ist) und ich die Datei dann importiere, gehen diese Eigenschaften wieder verloren.
Ich kann also im E-Vault die vorhandenen Dateien nicht mehr nach den von mir gesetzten Infos durchforsten. Im Datenbanksystem befinden sich außer dem ursprünglichen Dateinamen (also NICHT der Pfad, aus dem ich meine Infos beziehen könnte) keine nützlichen Informationen.
Nun habe ich mich gefragt, ob ich nicht hinter das EOF-Bit schreiben könnte und den Dateien so meine Infos mitgeben...
Mein Problem also noch Mal in einem Satz:
Ich suche eine Möglichkeit, Dateien mit Informationen auszustatten, die ich über den Ursprungspfad generiere, wobei im Prinzip auch die Zuweisung einer eindeutigen ID auch funktionieren würde, welche sich jedoch nicht im Dateinamen oder in den Dateieigenschaften wiederspiegeln kann (da die Eigenschaften ja gelöscht werden).
Schematisch:
Datei -> Infos extrahieren -> Infos anhängen (hier liegt mein Problem) -> Importieren ins DB-System -> Infos auslesen und in die DB schreiben
Ich hoffe ich habe etwas Klarheit in die Angelegenheit gebracht.
Chris
Mit freundlichen Grüßen,
Chris
Chris
Das hört sich nach einer guten Möglichkeit an! Bleibt der Hashwert einer Datei gleich, wenn sich Pfad und Dateiname ändern? Wenn ja, hast du mir warscheinlich die Lösung zu meine Problem geliefert.HerrHagen hat geschrieben: ...
Du suchst evtl. Hashes mit denen du eine Datei schnell indizieren kannst.
Wie Hyperion schon sagte: Gib lieber ein konkretes Beispiel.
MFG HerrHagen
Könntest du mir vielleicht noch ein paar Schlagworte zum Thema Hashes bzw. Haswertberechnung von Dateien geben, damit ich besser Recherchieren kann?
Chris
Mit freundlichen Grüßen,
Chris
Chris
@KurrKurr: So etwas wie ein "EOF-Bit" gibt es nicht. Folglich kann man auch nichts dahinter schreiben. Üblicherweise nimmt man genau für solche Metainformationen die Datenbank, wo man den Pfad zur Datei und dann die Daten speichert, die zu dieser Datei gehören.
Wenn du den Hashwert über den Inhalt bildest, dann ja.KurrKurr hat geschrieben:Bleibt der Hashwert einer Datei gleich, wenn sich Pfad und Dateiname ändern?
hashlibKurrKurr hat geschrieben:Könntest du mir vielleicht noch ein paar Schlagworte zum Thema Hashes bzw. Haswertberechnung von Dateien geben, damit ich besser Recherchieren kann?
Das Leben ist wie ein Tennisball.
Ah, danke! Werde mich gleich Mal damit auseinandersetzen.
C.
C.
Mit freundlichen Grüßen,
Chris
Chris
Danke für die Tipps! Ich habe das Problem lösen können! Ich generiere zu jeder Datei die MD5-Checksumme, mit welcher ich dann die Importierten Dateien abgleichen kann.
Die logische Verbindung zu den Dateien vor dem Import ins Datenbanksystem zu den Dateien nach dem Import ist somit hergestellt und ich kann endlich meine generierten Informationen übertragen!
Hier noch die Funktion die ich zur generierung verwende:
Danke nochmals für die Hilfe!
Schönen Tag, Chris
P.S.: Das Thema könnte geschlossen werden...
Die logische Verbindung zu den Dateien vor dem Import ins Datenbanksystem zu den Dateien nach dem Import ist somit hergestellt und ich kann endlich meine generierten Informationen übertragen!
Hier noch die Funktion die ich zur generierung verwende:
Code: Alles auswählen
from os.path import *
import os, hashlib
class modex:
# ... Diverse Methoden, etc. meiner Klasse ...
def __md5(self, fn, log=False):
try:
if log:
print "modex: Generiere Hashwert..."
with open(fn, "rb") as f:
self.__md5container = hashlib.md5()
while 1:
self.__puffer = f.read(4096)
if self.__puffer == "":
break
self.__md5container.update(self.__puffer)
self.__hash = self.__md5container.hexdigest()
if log:
print "modex: Hashwert erzeugt:",self.__hash
return self.__hash
except:
if log:
print "modex: Fehler bei der Hashwertgenerierung!"
return "modex: Hashfehler"
Schönen Tag, Chris
P.S.: Das Thema könnte geschlossen werden...
Mit freundlichen Grüßen,
Chris
Chris
Was mir dazu einfällt wäre [wiki=PEP_8_(Übersetzung)]PEP 8[/wiki]
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Mir faellt dazu noch ein, dass man in Python2.x von ``object`` erben sollte.
``while 1`` -> ``while True``
``if self.__puffer == "":`` liesse sich durch ``if not self.__puffer`` ersetzen
Und falls dieses ``if log: print`` oefters auftaucht, sollte man mal ueber eine Funktion nachdenken, die das verpackt - damit ist man auch was das Ausgabemedium angeht flexibel. Oder gleich ``logging`` verwenden.
Und das blanke ``except`` ... das geht gar nich. Entweder du weisst, was da rausspringt und behandelst das entsprechend oder du laesst das weiterfliegen.
``while 1`` -> ``while True``
``if self.__puffer == "":`` liesse sich durch ``if not self.__puffer`` ersetzen
Und falls dieses ``if log: print`` oefters auftaucht, sollte man mal ueber eine Funktion nachdenken, die das verpackt - damit ist man auch was das Ausgabemedium angeht flexibel. Oder gleich ``logging`` verwenden.
Und das blanke ``except`` ... das geht gar nich. Entweder du weisst, was da rausspringt und behandelst das entsprechend oder du laesst das weiterfliegen.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Themen werden bei uns nicht geschlossen.
Bist du dir wirklich sicher was du da machst? Dir ist bewusst das Dateien trotz gleichen Hash-Werts unterschiedlich sein können (unwahrscheinlich aber möglich)? Warum speicherst du in deiner Datenbank, wenn dort eh die komplette Datei gesichert wird, nicht die Zusatzinformationen als Felder mit?
Noch ein paar kleine Anmerkungen zu deinem Code (da kommt sicher noch mehr):
Lass das if log weg und verwende am besten gleich das logging-Modul. Das ist zwar am Anfang ein wenig sperrig, aber doch enorm praktisch. Zudem verhinderst du das überall Programmverzweigungen und Funktionsargumente stehen wo in Wirklichkeit keine sind.
Except ohne Angabe eine konkreten Exception sollte man besser vermeiden, da sonst alles abgefangen wird (auch KeyboardInterrupt).
MFG HerrHagen
EDIT: verdammt war ich langsam, ... aber die Prognose war korrekt.
Bist du dir wirklich sicher was du da machst? Dir ist bewusst das Dateien trotz gleichen Hash-Werts unterschiedlich sein können (unwahrscheinlich aber möglich)? Warum speicherst du in deiner Datenbank, wenn dort eh die komplette Datei gesichert wird, nicht die Zusatzinformationen als Felder mit?
Noch ein paar kleine Anmerkungen zu deinem Code (da kommt sicher noch mehr):
Lass das if log weg und verwende am besten gleich das logging-Modul. Das ist zwar am Anfang ein wenig sperrig, aber doch enorm praktisch. Zudem verhinderst du das überall Programmverzweigungen und Funktionsargumente stehen wo in Wirklichkeit keine sind.
Except ohne Angabe eine konkreten Exception sollte man besser vermeiden, da sonst alles abgefangen wird (auch KeyboardInterrupt).
MFG HerrHagen
EDIT: verdammt war ich langsam, ... aber die Prognose war korrekt.
Du solltest lokale Variablen nicht zu Objektvariablen machen.
self.__puffer brauchst du ja nur innerhalb deiner Funktion und nicht ausserhalb, oder?
self.__puffer brauchst du ja nur innerhalb deiner Funktion und nicht ausserhalb, oder?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Und diese doppelten führenden Unterstriche sollte man alle rauswerfen. Man kann ja überlegen, wo man *einen* setzt, aber doch nicht *überall* doppelte.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Na das deckt ja PEP 8 ab. Drum hab ichs mir auch verkniffen 

Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
ok... danke für die Hinweise auf meinen z.Zt. noch schlechten Stil. Werde mir Mal dieses PEP8 zu Gemüte führen.
Das mit den Objektvariablen hat mich mittlerweile auch schon gestört. Ich denke, ich werde meinen Code Mal überarbeiten müssen...
Der Thread sollte jedoch nicht eine Diskussion meines, zugegebenermaßen schlechten Stils (an dem ich noch abeiten muss... ich Programiere erst seit einer guten Woche mit Python!), sondern eher eine Ideensammlung für mein Problem sein.
Zurück zum Thema:
Leider stehe ich vor einem Massenimport. Wir sprechen von ca. 5500 Dateien. Das sind 4,5 GB Volumen. Außerdem sind - von den Dateinamen her ca 1800 Duplikate vorhanden, die ich jedoch nicht verwerfen kann, da die Konstrukteure diese Dateien immer wieder in ihren Baugruppen verwenden. Ja, am klügsten wäre es, die Duplikate zu löschen und in den Baugruppen immer auf das Unikat zu verweisen... Das müsste den Konstrukteuren aber Mal jemand sagen!
Wie ich die Duplikate entfernen könnte? Keine Ahnung. Ich kenne mich leider mit dem CATIA-Dateiformat nicht so gut aus, sodass ich die Verweise in den Baugruppendateien "umlegen" könnte...
Aber abgesehen von dem Duplikatproblem:
Das DB-Programm kann diese speziellen Informationen Nicht mitnehmen. Laut Support der Herstellerfirma gibt es in ihrem Framework keine Möglichkeit auf den Datenimport und somit auf die Metadatengenerierung Einfluss zu nehmen.
Die einzige Möglichkeit, die ich habe, ist z.B. die Dokumentennummergenerierung zu verändern und dort meine Information rein zu packen. Das wäre jetzt mein nächster Schritt.
Durch die Duplikatproblematik kann ich nämlich auch mittels Hashwert die Dateien nicht eindeutig identifizieren.
Hat also jemand eine Idee, wie ich die logische Brücke zwischen "vor dem Import" und "nach dem Import" schlagen, also den Dateien irgendwie eine ID mitgeben kann? Ich stehe nämlich irgendwie wie der Ochse vorm Berg...
Noch mal für die, die nicht den ganzen Thread verfolgt haben: die ID im Dateinamen oder in den Dateieigenschaften unterzubringen ist leider keine mögliche Option.
Chris
[Edit:]
Ich war gerade am Überlegen als mir folgendes eingefallen ist:
Es gibt doch auch die Möglichekeit, Torjaner und anderes Virenzeugs in Dateien zu verstecken. Ich könnte doch einfach meine Attribute auch so in den Dateien verstecken.
Weiß jemand wie man das anstellt?
Chris
Das mit den Objektvariablen hat mich mittlerweile auch schon gestört. Ich denke, ich werde meinen Code Mal überarbeiten müssen...

Der Thread sollte jedoch nicht eine Diskussion meines, zugegebenermaßen schlechten Stils (an dem ich noch abeiten muss... ich Programiere erst seit einer guten Woche mit Python!), sondern eher eine Ideensammlung für mein Problem sein.
Zurück zum Thema:
Ich bin mir durchaus bewusst, dass es Kollisionen geben kann. Ich halte aber dieses Risiko für so gering, dass ich es bewusst vernachlässige. Falls ich das nicht tun sollte, muss ich mir wieder einen anderen Weg aussuchen. Langsam gehen mir aber die Ideen aus.HerrHagen hat geschrieben:...
Bist du dir wirklich sicher was du da machst? Dir ist bewusst das Dateien trotz gleichen Hash-Werts unterschiedlich sein können (unwahrscheinlich aber möglich)?
...
Wenn das doch so einfach wäre, würde ich nicht diesen Aufwand betreiben. Wenn ich einzelne Dateien (also wenige) übertrage kann ich durchaus die Informationen als Felder in die Datenbank speichern (also manuell festlegen).HerrHagen hat geschrieben:...
Warum speicherst du in deiner Datenbank, wenn dort eh die komplette Datei gesichert wird, nicht die Zusatzinformationen als Felder mit?
...
Leider stehe ich vor einem Massenimport. Wir sprechen von ca. 5500 Dateien. Das sind 4,5 GB Volumen. Außerdem sind - von den Dateinamen her ca 1800 Duplikate vorhanden, die ich jedoch nicht verwerfen kann, da die Konstrukteure diese Dateien immer wieder in ihren Baugruppen verwenden. Ja, am klügsten wäre es, die Duplikate zu löschen und in den Baugruppen immer auf das Unikat zu verweisen... Das müsste den Konstrukteuren aber Mal jemand sagen!
Wie ich die Duplikate entfernen könnte? Keine Ahnung. Ich kenne mich leider mit dem CATIA-Dateiformat nicht so gut aus, sodass ich die Verweise in den Baugruppendateien "umlegen" könnte...
Aber abgesehen von dem Duplikatproblem:
Das DB-Programm kann diese speziellen Informationen Nicht mitnehmen. Laut Support der Herstellerfirma gibt es in ihrem Framework keine Möglichkeit auf den Datenimport und somit auf die Metadatengenerierung Einfluss zu nehmen.
Die einzige Möglichkeit, die ich habe, ist z.B. die Dokumentennummergenerierung zu verändern und dort meine Information rein zu packen. Das wäre jetzt mein nächster Schritt.
Durch die Duplikatproblematik kann ich nämlich auch mittels Hashwert die Dateien nicht eindeutig identifizieren.
Hat also jemand eine Idee, wie ich die logische Brücke zwischen "vor dem Import" und "nach dem Import" schlagen, also den Dateien irgendwie eine ID mitgeben kann? Ich stehe nämlich irgendwie wie der Ochse vorm Berg...
Noch mal für die, die nicht den ganzen Thread verfolgt haben: die ID im Dateinamen oder in den Dateieigenschaften unterzubringen ist leider keine mögliche Option.
Chris
[Edit:]
Naja... damit deklariert man doch Variablen als "private", oder nicht?!! Wenn ich nur einen setze, wären sie ja nur "protected"...BlackJack hat geschrieben:Und diese doppelten führenden Unterstriche sollte man alle rauswerfen. Man kann ja überlegen, wo man *einen* setzt, aber doch nicht *überall* doppelte.
Ich war gerade am Überlegen als mir folgendes eingefallen ist:
Es gibt doch auch die Möglichekeit, Torjaner und anderes Virenzeugs in Dateien zu verstecken. Ich könnte doch einfach meine Attribute auch so in den Dateien verstecken.
Weiß jemand wie man das anstellt?
Chris
Mit freundlichen Grüßen,
Chris
Chris
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Also ich kapiere immer noch nicht das Problem! Du hast vorher Dateien und hinterher. Was passiert denn dazwischen und wieso ist das ein Problem?
Hinzu kommt noch eines: Ein PDM-System ist eigentlich immer DB-basiert und speichert dort die Meta-Infos zu den CAD-Dateien (oder sonstigen externen Ressourcen). Innerhalb eines PDM-Systems hat eigentlich jedes Bauteil / -gruppe eine eindeutige ID.
Daher noch einmal die Frage: Was soll passieren?
Hinzu kommt noch eines: Ein PDM-System ist eigentlich immer DB-basiert und speichert dort die Meta-Infos zu den CAD-Dateien (oder sonstigen externen Ressourcen). Innerhalb eines PDM-Systems hat eigentlich jedes Bauteil / -gruppe eine eindeutige ID.
Daher noch einmal die Frage: Was soll passieren?
Also noch Mal:
Meine Aufgabe besteht darin, ein PDM-System für unsere Konstrukteure an der Uni einzuführen. Wir bauen einen Rennwagen für die Formula Student.
Ich habe einen großen Ordner mit vielen Konstruktionsdaten. In diesem Ordner sind die alten Konstruktionsdaten drinnen, die noch vor dem PDM-System erstellt wurden. Die Ordnerstruktur bildet unser Modulsystem ab (Ober- und Untermodule).
Nun sollen diese Daten ins PDM-System verlagert werden. Leider ist das System von sich aus nicht fähig die Modulinformationen aus der Ordnerstruktur abzuleiten. Daher gehen die Informationen über die Module (Motor, Chassis, Fahrwerk, etc.) verloren.
Ich habe das PDM-System bereits soweit angepasst, dass es eine Ober-/Untermodulstruktur abbilden kann. Für ein neues Projekt also kein Problem.
Das Problem besteht beim Import der alten Daten! Ich habe bereits ein Pythonprogramm geschrieben, das mir die Modulinformationen aus der Ordnerstruktur extrahiert.
Ich stehe jetzt vor dem Problem, diese Informationen in die Datenbank an die RICHTIGE Stelle zu bringen. Das PDM-System ist nicht in der Lage, während dem Import mein Programm mitlaufen zu lassen um die Modulinformationen zu bekommen.
Ich muss also irgendwie die Verbindung zwischen den alten Daten im Ordner und den neuen Daten im e-Vault herstellen.
Das habe ich bereits über den Dateinamen (duplikate! außerdem nicht anwendbar, weil CAD-Daten!), über die Dateieigenschaften (also den Alternate Data Stream in NTFS - wird gelöscht!) und jetzt über einen Hashwert (wieder duplikate!) versucht.
Mittlerweile habe ich mein Problem darauf heruntergebrochen, Dateien eine eindeutige ID zuzuweisen, die während des Imports nicht verloren geht. Hinterher kann ich dann die IDs vergleichen und meine Modulinformationen über diesen Schlüssel in die Datenbank übertragen.
Zusammenfassend: Weil das PDM-System zwar automatisch viele Metadaten speichert, jedoch nicht die geforderten benutzerdefinierten Modulinformationen muss ich diese auf einem anderen Weg übertragen. Die Fragestellung zu diesem Problem steht im vorherigen (roten) Absatz.
Ich hoffe, dass ich jetzt für Klarheit gesorgt habe.
Chris
Meine Aufgabe besteht darin, ein PDM-System für unsere Konstrukteure an der Uni einzuführen. Wir bauen einen Rennwagen für die Formula Student.
Ich habe einen großen Ordner mit vielen Konstruktionsdaten. In diesem Ordner sind die alten Konstruktionsdaten drinnen, die noch vor dem PDM-System erstellt wurden. Die Ordnerstruktur bildet unser Modulsystem ab (Ober- und Untermodule).
Nun sollen diese Daten ins PDM-System verlagert werden. Leider ist das System von sich aus nicht fähig die Modulinformationen aus der Ordnerstruktur abzuleiten. Daher gehen die Informationen über die Module (Motor, Chassis, Fahrwerk, etc.) verloren.
Ich habe das PDM-System bereits soweit angepasst, dass es eine Ober-/Untermodulstruktur abbilden kann. Für ein neues Projekt also kein Problem.
Das Problem besteht beim Import der alten Daten! Ich habe bereits ein Pythonprogramm geschrieben, das mir die Modulinformationen aus der Ordnerstruktur extrahiert.
Ich stehe jetzt vor dem Problem, diese Informationen in die Datenbank an die RICHTIGE Stelle zu bringen. Das PDM-System ist nicht in der Lage, während dem Import mein Programm mitlaufen zu lassen um die Modulinformationen zu bekommen.
Ich muss also irgendwie die Verbindung zwischen den alten Daten im Ordner und den neuen Daten im e-Vault herstellen.
Das habe ich bereits über den Dateinamen (duplikate! außerdem nicht anwendbar, weil CAD-Daten!), über die Dateieigenschaften (also den Alternate Data Stream in NTFS - wird gelöscht!) und jetzt über einen Hashwert (wieder duplikate!) versucht.
Mittlerweile habe ich mein Problem darauf heruntergebrochen, Dateien eine eindeutige ID zuzuweisen, die während des Imports nicht verloren geht. Hinterher kann ich dann die IDs vergleichen und meine Modulinformationen über diesen Schlüssel in die Datenbank übertragen.
Zusammenfassend: Weil das PDM-System zwar automatisch viele Metadaten speichert, jedoch nicht die geforderten benutzerdefinierten Modulinformationen muss ich diese auf einem anderen Weg übertragen. Die Fragestellung zu diesem Problem steht im vorherigen (roten) Absatz.
Ich hoffe, dass ich jetzt für Klarheit gesorgt habe.
Chris
Zuletzt geändert von KurrKurr am Samstag 8. August 2009, 13:00, insgesamt 1-mal geändert.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Nein. Python kennt keine Zugriffsbegrenzung, sondern geht das ``by Contract`` an. D.h. kennzeichnest du einen Namen mit ``_``, heisst das fuer andere: "Wenn du das anfasst, knallts und du bist selbst dran Schuld!"KurrKurr hat geschrieben:Naja... damit deklariert man doch Variablen als "private", oder nicht?!! Wenn ich nur einen setze, wären sie ja nur "protected"..
Mit ``__`` gibt es ein ``Name mangling`` und macht so die Attribute von aussen unzugaenglich - naja nicht wirklich, es wird nur mit dem Klassennamen verschweisst, naeheres im Tutorial. Aber keinesfalls eine Zugriffsbeschraenkung.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Ah ok... Gut zu wissen. Ich habe vor Python viel mit Java programmiert. Deshalb dachte ich, dass ich in Python die Kapselung so umsetzen kann. Kann man denn in Python nicht "wirklich" Kapseln? Die Member sind ja im Prinzip immer von außen zugänglich, odr nicht?cofi hat geschrieben:Nein. Python kennt keine Zugriffsbegrenzung, sondern geht das ``by Contract`` an. D.h. kennzeichnest du einen Namen mit ``_``, heisst das fuer andere: "Wenn du das anfasst, knallts und du bist selbst dran Schuld!"KurrKurr hat geschrieben:Naja... damit deklariert man doch Variablen als "private", oder nicht?!! Wenn ich nur einen setze, wären sie ja nur "protected"..
Mit ``__`` gibt es ein ``Name mangling`` und macht so die Attribute von aussen unzugaenglich - naja nicht wirklich, es wird nur mit dem Klassennamen verschweisst, naeheres im Tutorial. Aber keinesfalls eine Zugriffsbeschraenkung.
Ich habe übrigens Python schnell innerhalb von zwei Tagen mit dem Buch "Python 3 - Das umfassende Handbuch" vom Galileo Computing-Verlag gelernt. Daher habe ich noch Lücken im Umgang mit Python. Ich bin natürlich froh, wenn ich auf Mist, den ich programmiert habe hingewiesen werde. So kann ich diese Wissenslücken schließen.
Chris