Die sscanf()-Funktionalität in Python

Abid Ullah 10 Oktober 2023
Die sscanf()-Funktionalität in Python

Die Funktion sscanf() stammt aus der Programmiersprache C und C++. Obwohl Python keine genau äquivalente Methode oder Bibliothek für diese Methode anbietet, gibt es möglicherweise andere Möglichkeiten, diese Funktionalität auszuführen.

Dieser Python-Artikel wird Ihnen helfen, besser zu verstehen, was sscanf() zu bieten hat und wie wir es in einem Python-Skript nachahmen können.

die sscanf()-Funktionalität in Python

Die Methode sscanf() extrahiert einen String aus einem bereits bereitgestellten String. So deklarieren wir die Methode:

int sscanf(const char *str, const char *format, ...)

Diese Methode liest im Wesentlichen formatierte Eingaben aus einem String, und im Gegensatz zu scanf() werden die Daten für sscanf() aus einem String statt aus einer Konsole gelesen. Die Daten werden aus dem Puffer und in die als Argumente in der Methodendeklaration angegebenen Standortadressen gelesen.

Jedes angegebene Argument zeigt auf eine Variable mit demselben Typ wie der Formatstring. Die Methode gibt die Werte zurück, die erfolgreich konvertiert und zugewiesen wurden.

In Python selbst gibt es keine direkten äquivalenten Bibliotheken oder Module für sscanf(). Es gibt jedoch zwei Möglichkeiten, die Funktionalität nachzuahmen.

Verwenden Sie reguläre Ausdrücke aus der re-Bibliothek

Ein regulärer Ausdruck hilft dabei, das Format einer Zeichenfolge anzugeben oder das Format einer Zeichenfolge zu beschreiben, das dann verwendet werden kann, um eine andere Zeichenfolge zu validieren. Ein regulärer Ausdruck kann sowohl Sonderzeichen als auch gewöhnliche Zeichen enthalten.

Zeichen wie A, B, b oder 0 sind gute Beispiele für die einfachsten gewöhnlichen Zeichen in einem Ausdruck. Die Bibliothek kann auch nach bestimmten Zeichen in einer Zeichenfolge oder einer Liste von Zeichen in einer bestimmten Reihenfolge suchen.

Sehen Sie sich das Beispielskript unten an, das nach der Zeichenfolge def in einer bereitgestellten Zeichenfolge sucht.

Beispielcode:

import re

m = re.search("(?<=abc)def", "abcdef")
m.group(0)

Das Programm gibt als Ausgabe def zurück.

Es ist auch möglich, durch Sonderzeichen getrennte Zeichenfolgen innerhalb von Zeichenfolgen zu suchen. Im folgenden Skript suchen wir beispielsweise nach dem Wort, das nach einem Bindestrich angegeben wird:

Beispielcode:

m = re.search(r"(?<=-)\w+", "spam-emails")
m.group(0)

Die Ausgabe dafür ist emails. Die Möglichkeiten des Parsens mit re sind endlos!

Eine andere Bibliothek ähnlich zu re ist regex, die API-freundlich ist. Regex ist abwärtskompatibel zu re und bringt zusätzliche Funktionalitäten mit.

Es folgt ein bedingter Mustertest, der mit einem regex-Modul ermöglicht wird. Wir müssen natürlich die Bibliothek importieren, bevor wir dies ausführen.

Beispielcode:

>>> regex.match(r'(?(?=\d)\d+|\w+)', '123abc')
<regex.Match object; span=(0, 3), match='123'>
>>> regex.match(r'(?(?=\d)\d+|\w+)', 'abc123')
<regex.Match object; span=(0, 6), match='abc123'>

Verwenden Sie die Neuron-Bibliothek

Die Bibliothek neuron (nicht von Python selbst) kann auch verwendet werden, um sscanf() in ein Python-Skript zu importieren. Wenn wir beispielsweise das folgende Skript ausführen würden,

from neuron import h

x = h.ref(0)
h.sscanf("0.3", "%f", x)
print(x[0])

Die resultierende Ausgabe wäre 0.300000011921.

Hier sind einige weitere Beispiele, die wir durchgehen können, um die Verwendung von sscanf() in Python über die neuron-Bibliothek zu verstehen, wobei die Ausgaben für jede Zeile als Kommentar hinzugefügt werden.

Beispielcode:

from neuron import h as hoc

string = hoc.ref("")
range_list = [hoc.ref(0) for i in range(50)]
hoc.sscanf("This is a test\n", "%s", string)
print(string[0])
hoc.sscanf("This is a test\n", "%[^\n]", string)
print(string[0])
hoc.sscanf("This is a test\n", "%*s%s", string)
print(string[0])
hoc.sscanf(
    "1 2 3 4 5 6 7 8 9 10",
    "%f%f%f%f%f%f%f%f%f%f%f",
    range_list[0],
    range_list[1],
    range_list[2],
    range_list[3],
    range_list[4],
    range_list[5],
    range_list[6],
    range_list[7],
    range_list[8],
    range_list[9],
    range_list[10],
    range_list[11],
    range_list[12],
)
print("Should only have non-zero values for range_list indices 0 - 9")
for i in range(13):
    print("%d %g" % (i, range_list[i][0]))

Wie man an beiden oben beschriebenen Optionen erkennen kann, können wir je nach Szenario beide Bibliotheken verwenden. Python ist eine umfangreiche, schnell typisierte und schöne Sprache, die uns eine breite Palette von Optionen bietet, um Zeichenfolgen auf eine Weise zu analysieren, die für Python typisch ist.

Die Bibliotheken re und regex sind Beispiele für die Weite der Sprache.

Wir hoffen, dass Sie diesen Artikel hilfreich finden, um das Grundkonzept der in Python verwendeten Funktion sscanf() zu verstehen.

Autor: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.

LinkedIn