Seite 1 von 1

Objekttyp für Dateien und Verzeichnisse?

Verfasst: Donnerstag 14. Dezember 2006, 22:48
von droptix
Gibt es einen Objekttyp für Dateien, Verzeichnisse, Symlinks und Mountpoints?

Wie bestimmt beispielsweise os.path.isdir() den Typ directory?

Re: Objekttyp für Dateien und Verzeichnisse?

Verfasst: Donnerstag 14. Dezember 2006, 23:10
von Leonidas
droptix hat geschrieben:Gibt es einen Objekttyp für Dateien, Verzeichnisse, Symlinks und Mountpoints?
Unter Unix ist theoretisch alles eine Datei. Also sind Dateien, Verzeichnisse und Symlinks Dateien. Mountpoints sind normale Ordner. Du kannst verschiedenes (alos Devices, andere Ordner, FUSE-Dateisysteme) in Ordner mounten die dann den vorherigen Inhalt des Ordners "überdecken".
droptix hat geschrieben:Wie bestimmt beispielsweise os.path.isdir() den Typ directory?
Ganz kurz, etwa so:

Code: Alles auswählen

import os, stat
stat.S_ISDIR(os.stat('dein_pfad').st_mode)
Nun wie es in genericpath.py gelöst wird:

Code: Alles auswählen

def isdir(s):
    """Return true if the pathname refers to an existing directory."""
    try:
        st = os.stat(s)
    except os.error:
        return False
    return stat.S_ISDIR(st.st_mode)
stat.S_ISDIR ist in stat.py so definiert:

Code: Alles auswählen

def S_ISDIR(mode):
    return S_IFMT(mode) == S_IFDIR
Wobei S_IFDIR gleich 0040000 ist und S_IFMT so aussieht.

Code: Alles auswählen

def S_IFMT(mode):
    return mode & 0170000

Also kein Objekttyp

Verfasst: Donnerstag 14. Dezember 2006, 23:27
von droptix
Also gibt's in Pyhton keinen vorgefertigten Objekttyp für Dateien und Verzeichnisse?

Re: Also kein Objekttyp

Verfasst: Donnerstag 14. Dezember 2006, 23:38
von Leonidas
droptix hat geschrieben:Also gibt's in Pyhton keinen vorgefertigten Objekttyp für Dateien und Verzeichnisse?
Wieso sollte es den geben? Wenn du eine Datei zum editieren brauchst, dann nutzt du file(), und Ordner werden sowieso nie direkt editiert.

Wieso? Weil ich's brauche :)

Verfasst: Donnerstag 14. Dezember 2006, 23:48
von droptix
Wieso? Weil ich Interesse daran habe ein Dateisystem testweise als verknüpfte Objekte widerzuspiegeln. :D Ich möchte probieren, ob sich damit sinnvoll arbeiten lässt.

Im Kopf habe ich sowas Ähnliches wie XML-Knoten. Ein Verzeichnis ist ein Knoten mit dem Attribut name. Ein weiteres Attribut parent ist analog zu XML der Elternknoten (parentNode), also das übergeordnete Verzeichnis. Der Knoten files ist eine Liste aller Kinderknoten (childNodes) mit type="file". Das Attribut dirs ist hingegen eine Liste aller Kinderknoten mit type="dir" — enthält also Verweise auf Unterverzeichnisse.

Analog was Ähnliches zu Dateien. Dateien könnten neben name und dir auch die Attribute size und mtime besitzen...

Sowas in der Art halt. Ich muss mir ja nicht die Mühe machen, wenn's sowas schon gibt.

Verfasst: Freitag 15. Dezember 2006, 20:09
von Joghurt
Das wäre aber keine Sinnvolle XML-Struktur. Wenn schon, dann sowas

Code: Alles auswählen

<dir name="/">
  <file name="foo"/>
  <file name="bar"/>
  <dir name="baz">
    <file name="blubb"/>
  </dir>
  <dir name="blubb2"/>
</dir>

Verfasst: Freitag 15. Dezember 2006, 20:49
von birkenfeld
Sowas ist ja leicht selbst zu schreiben.

Es gibt bereits eine Klasse für Pfade (die allerdings nicht unbedingt existierende Dateien und Verzeichnisse darstellt) -- suche nach path.py.