Samstag, März 17, 2007

Freemind: Links zu lokalen Dateien kontrollieren

Ich nutze Freemind (MindMapping Tool) unter anderem, um mir in einem Verzeichnis mit vielen Dokumenten (Artikel und weitere Quellen, in meinen Fall mittlerweile um die 350 Dokumenten) einen Überblick (thematisch) verschaffen zu können, eine äußerst nützliche Funktion.

Allerdings hat man im Laufe der Zeit ja immer wieder etwas verändert, z. B. Dateien verschoben oder unbenannt. Es ist dann recht schwer zu kontrollieren, ob noch alle Verknüpfungen stimmen. Hierzu habe ich mir dann einen kleinen Script geschrieben, der mir diese Arbeit abnimmt und mir die Links anzeigt, für die es keine Datei mehr gibt.

Das Skript läuft bei mir recht gut, ist aber sicherlich sehr verbesserungsfähig. Ist ja aber auch nur "hobby"... Für Tipps bin ich dankbar.

Falls also jemand sowas braucht, hier ist es:


"""
Allgemeine Einstellungen
#######__BITTE ANPASSEN__##########
"""
# Freemind Datei die geprüft werden soll
PfadUndName = r'D:\Ordner1\Ordner2\Freemind_Datei.mm'
#Pfad zu dem Ordner wo alle Dateien liegen - Angabe ohne "\" am Ende!
PfadETMListe = r'D:\Ordner1\Ordner2\Scann'
# Datei in der die falschen, d. h. nicht zu einer Datei führenden Links geschrieben werden sollen
DateiMitFalschenLinks = r'c:\Ordner1\Ordner2\Falschelinks.txt'

"""
Import der benötigten Modulen
"""
from xml.dom.minidom import *
from os import *
from os.path import *

"""
Datei öfnen und Inhalt bzw. Text in eine Variable speichern
Die Datei wird nur zum lesen geöffnet und danach sofort wieder geschlossen
"""
xml_file = file(PfadUndName)
xml_textraw = xml_file.read()
xml_text = xml_textraw.encode("utf-8")
xml_file.close()

# XML Verarbeitung

xml_objekt = parseString(xml_text)
nodeliste = xml_objekt.getElementsByTagName("node")

falschelinks = ["Falsche Links:"]

for node in nodeliste:
pfad = node.getAttribute("LINK")
DateiMitPfad = join(PfadETMListe,pfad)
if isfile(DateiMitPfad) == 0:
falschelinks.append(pfad)

# Alte Datei, falls vorhanden, löschen
if isfile(DateiMitFalschenLinks):
remove(DateiMitFalschenLinks)

# Datei neu anlegen
f = file(DateiMitFalschenLinks,'w+')

# Links die nicht gefunden wurden in neue Datei schreiben
for link in falschelinks:
if link != '':
f.write(link.encode("utf-8"))
f.write("\n")

f.close()

Keine Kommentare: