Ich habe eine große Struktur in C statisch deklariert, aber ich muss diese Daten für eine Analyse in Python verwenden. Ich möchte diese Daten lieber nicht in Python kopieren, um Fehler zu vermeiden. Gibt es eine Möglichkeit, diese Daten direkt in Python (schreibgeschützt) zu lesen? Ich habe "Ctypes" und SWIG angeschaut, und keiner von beiden scheint mir das zu bieten, wonach ich suche ....
Zum Beispiel habe ich:
/ * .h-Datei * /
%Vor%/ * .c-Datei * /
%Vor% Idealerweise würde mir etwas gefallen, das mir erlauben würde, das in python zu bekommen und über the_data_i_want.array[1].data[2]
oder etwas ähnliches darauf zuzugreifen. Irgendwelche Gedanken? Ich habe es geschafft zu "arbeiten" in dem Sinne, dass ich in der Lage bin, ein .so, das aus meiner .c-Datei erstellt wurde, zu kompilieren / importieren, aber ich konnte auf nichts davon über cvars zugreifen. Vielleicht gibt es einen anderen Weg? Es scheint, als ob das nicht so schwer sein sollte ....
Eigentlich habe ich es herausgefunden. Ich füge das hinzu, weil mein Ruf es mir nicht erlaubt, meine eigene Frage innerhalb von 8 Stunden zu beantworten, und da ich mich in 8 Stunden nicht erinnern will, werde ich es jetzt hinzufügen. Ich bin mir sicher, dass es einen guten Grund dafür gibt, den ich nicht verstehe.
Ich habe es herausgefunden.
1. Ich habe meine .c-Datei in eine Bibliothek übersetzt:
Dann habe ich Typen verwendet, um eine Python-Klasse zu definieren, die die Daten enthält:
%Vor%Dann habe ich die shared library in python geladen:
%Vor%Dann habe ich die "in_dll" -Methode verwendet, um die Daten zu erhalten:
%Vor% Dann könnte ich darauf zugreifen, als wäre es C. the_data_i_want.array[1].data[2]
Hinweis: Ich habe die Syntax hier vielleicht etwas durcheinander gebracht, weil meine tatsächliche Datenstruktur drei Ebenen umfasst und ich hier zu Illustrationszwecken vereinfachen wollte.
Sie könnten auch in C die Daten lesen und in eine JSON-Datei schreiben, die Sie dann leicht parsen können (normalerweise gibt es eine Bibliothek, die das sogar für Sie tut; python import json
) und Zugriff auf ein anderes Formular Plattform mit fast allen Spracheinstellungen, die Sie sich vorstellen können. Und gleichzeitig könnten Sie auf Ihre Daten zugegriffen haben, die sehr ähnlich sind, verglichen damit, wie Sie in Ihrem ursprünglichen C-Code darauf zugegriffen haben.
Genau wie ein Vorschlag. Das würde deine Daten auch portabler und vielseitiger machen, denke ich, aber du wirst mehr Zeit damit verbringen, den JSON zu schreiben und zu analysieren, als würdest du gerade den Datenstrom direkt von deinem C-Code in Python lesen.