Zurück zum BIM- & IFC-Blog
Werkzeuge & Vergleiche · 2026-06-03 · 8 Min.
IFC-Eigenschaftssätze in Python mit IfcOpenShell auslesen
Sie müssen Eigenschaftsdaten aus einer IFC-Datei herausziehen — Mengen, Klassifikationen, benutzerdefinierte Psets — und in eine Tabellenkalkulation, eine Datenbank oder eine QA-Prüfung überführen. Mit IfcOpenShell sind das ein paar Zeilen Python. Hier das praktische Kochbuch, einschließlich der get_psets-Abkürzung, die sich jeder wünscht, früher gefunden zu haben.
IFC-Eigenschaftssätze in Python mit IfcOpenShell auslesen — IFC Viewer Online article cover
Früher oder später muss jeder BIM-nahe Entwickler Daten aus einer IFC-Datei herausholen: Elementmengen für eine Mengenermittlung, Klassifikationen für ein Register, benutzerdefinierte Eigenschaftssätze für eine QA-Regel. IfcOpenShell ist die quelloffene Bibliothek, die das in Python handhabbar macht. Das ist der praktische Weg — der manuelle Weg, um die Struktur zu verstehen, und die Ein-Zeilen-Abkürzung für den Fall, dass Sie einfach nur die Daten brauchen.
Die Datei öffnen und Elemente finden
import ifcopenshell
model = ifcopenshell.open("model.ifc")
# All walls in the file
walls = model.by_type("IfcWall")
print(f"{len(walls)} walls")
# A single element by its GlobalId
el = model.by_guid("3LYa_FRDj3zhLfyYoQv6Jr")
Der manuelle Weg (die Struktur verstehen)
Eigenschaftssätze sind nicht direkt am Element gespeichert — sie hängen über eine Beziehung daran. Das IsDefinedBy eines Elements enthält IfcRelDefinesByProperties-Beziehungen, die jeweils auf einen Eigenschaftssatz verweisen (die RelatingPropertyDefinition). Innerhalb des Sets listet HasProperties die einzelnen Eigenschaften auf, von denen die meisten IfcPropertySingleValue mit einem Name und einem NominalValue sind.
wall = walls[0]
for rel in wall.IsDefinedBy:
if rel.is_a("IfcRelDefinesByProperties"):
pset = rel.RelatingPropertyDefinition
if pset.is_a("IfcPropertySet"):
print(pset.Name) # e.g. "Pset_WallCommon"
for prop in pset.HasProperties:
if prop.is_a("IfcPropertySingleValue") and prop.NominalValue:
print(f" {prop.Name} = {prop.NominalValue.wrappedValue}")
Die Abkürzung: get_psets()
Es lohnt sich, die manuelle Traversierung einmal zu verstehen, aber für die eigentliche Arbeit nutzen Sie das Hilfsmittel: ifcopenshell.util.element.get_psets() gibt jeden Eigenschaftssatz eines Elements als einfaches Dictionary zurück — Pset-Namen als Schlüssel, Eigenschafts-Dictionaries als Werte. Das ist deutlich weniger fehleranfällig, als die Beziehungen selbst abzulaufen.
import ifcopenshell.util.element as ue
psets = ue.get_psets(wall)
# {'Pset_WallCommon': {'IsExternal': True, 'FireRating': 'REI 60', 'id': 1234}, ...}
fire_rating = psets.get("Pset_WallCommon", {}).get("FireRating")
# Quantities only (areas, volumes, lengths)
qtos = ue.get_psets(wall, qtos_only=True)
Jedes Element in eine Tabelle exportieren
import csv
import ifcopenshell.util.element as ue
with open("elements.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerow(["GlobalId", "Class", "Name", "Pset", "Property", "Value"])
for el in model.by_type("IfcBuildingElement"):
for pset_name, props in ue.get_psets(el).items():
for key, value in props.items():
if key == "id":
continue
writer.writerow([el.GlobalId, el.is_a(), el.Name, pset_name, key, value])
Wo das Lesen aufhört und das Betrachten beginnt
Python ist ideal für die Massenextraktion und automatisierte QA in einer Pipeline. Aber wenn Sie sich die Eigenschaftssätze eines bestimmten Elements ansehen möchten — oder die Datei jemandem geben, der keinen Code schreibt —, ist ein Viewer, der beim Klick die Psets pro Element anzeigt, der schnellere Weg. Beide ergänzen sich: Massenprüfungen skripten, Sonderfälle visuell prüfen.
Psets visuell prüfen
Öffnen Sie das Duplex-Modell und klicken Sie auf ein beliebiges Element, um seine vollständigen Eigenschaftssätze zu sehen — dieselben Daten, die get_psets() liefert, ohne eine Zeile Code zu schreiben.
IFC2x3 · 2.4 MB
Interaktiven IFC-Viewer öffnen
IFC-Eigenschaftssätze in Python mit IfcOpenShell auslesen