Elektronik-Engineering-Wertnotationen mit Python normalisieren
In der Elektronikentwicklung gibt es eine große Vielfalt an Notationen für Werte, die von intuitiven Benutzeroberflächen erkannt werden müssen. Beispiele umfassen:
- 1fA
- 0.1A
- 0.00001
- 1e-6
- 4,5nA
- 4,500.123 A
- 4A5
- 4k0 A
Die große Vielfalt an Optionen, einschließlich Tausendertrennzeichen, Komma als Dezimaltrennzeichen und Suffix als Dezimaltrennzeichen, optionalem Leerzeichen und wissenschaftlicher Notation, macht es schwierig, Werte ohne spezialisierte Bibliotheken zu normalisieren.
Das in diesem Post aufgelistete Skript bietet eine Public-Domain-Bibliothek, um solche Werte umfassend zu normalisieren. Für korrekte Funktion sind eine Liste von SI-Präfixen und eine Liste gültiger Einheiten erforderlich. Diese müssen möglicherweise für verschiedene Anwendungen angepasst werden.
Ich habe die UliEngineering-Bibliothek geschrieben, eine reine Python3-Elektronikbibliothek, die neben vielen anderen nützlichen Funktionen wie Widerstandsauswahl auch das Parsen dieser Notation bietet.
Ein Verwendungsbeispiel ist am Ende des Skripts enthalten. Alle Funktionen geben None zurück, wenn ein Wert nicht interpretiert werden kann.
Installiere zunächst UliEngineering.
Dann kannst du die Funktionen aus EngineerIO.py verwenden, um das oben aufgeführte Format zu parsen und zu generieren. Neben den oben aufgeführten Notationen können viele verschiedene Werte geparst werden.
Verwende normalize_engineer_notation(), um ein (value, unit)-Tupel zu erhalten.
>>> from UliEngineering.EngineerIO import *
>>> normalize_engineer_notation("1 fA")
(1e-15, 'A')
>>> normalize_engineer_notation("4,500.123 A")
(4500.123, 'A')Beachte, dass UliEngineering eine eingebaute Liste von Einheiten hat, die deine Einheit enthalten muss, damit sie korrekt validiert werden kann. Spezielle Einheitenkombinationen wie V/√Hz oder Unicode-Präfixe wie µV werden ebenfalls erkannt.
Du kannst auch format_value() verwenden, um einen menschenlesbaren String mit SI-Präfix aus einem Wert und einer Einheit zu generieren:
>>> from UliEngineering.EngineerIO import *
>>> normalize_engineer_notation("4,500.123 A")
(4500.123, 'A')
>>> format_value(4.5e-6, "A")
'4.50 µA'
>>> format_value(4.5e-6, "V/√Hz")
'4.50 µV/√Hz'Wenn du einen angepassten Satz von Einheiten, Präfixen usw. benötigst, kannst du eine eigene Instanz der EngineerIO()-Klasse initialisieren.
Für den häufigen Fall, dass du nur den numerischen Wert benötigst und dich nicht um die Einheit kümmert, kannst du normalize_numeric() verwenden:
>>> from UliEngineering.EngineerIO import *
>>> normalize_numeric("4,500.123 A")
4500.123Beachte, dass UliEngineering nur auf Python3.x funktioniert, da Python2 nur bis 2020 unterstützt wird.