Beste Methode, um ein Python-Objekt in JMP zu importieren<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich habe Python-Code, der innerhalb von 15 Minuten etwa 3 GB Daten generieren kann.Derzeit werden die Daten als Zeile „Spalte“ value1|value2|value3.. in eine Textdatei gestreamt und anschließend eine Nachbearbeitung durchgeführt, um die gesamte Textdatei in eine CSV-Datei zu konvertieren, die jmp öffnen kann.Die CSV-Datei kann nach der Aufteilung der Werte bis zu 30.000 Spalten und 100 bis 10.000 Zeilen enthalten.
Damit die Daten schneller zu JMP gelangen, möchte ich die Textdaten direkt aus dem Speicher der Python-Sitzung in eine JMP-Sitzung streamen.
Ich habe eine alte Automatisierung mit Pycom ausprobiert, aber es scheint, dass die Aufrufe von Pycom sehr langsam sind, was es schwierig macht, in jeder Zeile zu iterieren und die richtige Zeile für die paar Werte zu aktualisieren, die in dieser „Zeile“ erzeugt werden.
Gibt es eine andere Art und Weise? SQLite-Speichertabelle? JSL-Socket?JMP-Python-API?
Betreff: Beste Methode, um ein Python-Objekt in JMP zu importierenCraig,
Keine große Hilfe, aber es funktioniert auch in JMP 13 auf diese Weise. Ich muss den JMP-Support fragen ... Vielleicht wird es in JMP 14 behoben
Betreff: Beste Methode, um ein Python-Objekt in JMP zu importierenDanke fürs Anschauen und gute Frage.
Ich denke, Sie bekämpfen das Verhalten der Windows-Befehlszeile mit eingebetteten Leerzeichen in Dateinamen.In einer DOS-Box würden Sie Anführungszeichen wie diese verwenden:

Das Entkommen wird etwas hässlich, aber hier ist es in JSL:
runprogram(executable("cmd.exe"), options({"/C","dir \!"c:\Users\chales\Saved Games\!""}), readfunction("text"))Ich habe hier im Büro kein Python, aber ich gehe davon aus, dass es das gleiche Verhalten zeigen wird.Noch schlimmer wird es, wenn Sie Anführungszeichen einbetten müssen. Ein anderes Projekt, an dem ich arbeite, verwendete \", wie in einer der Antworten in beschrieben http://stackoverflow.com/questions/7760545/cmd-escape-double-quotes-in-parameter
Wenn Sie die Pfadnamen für Ihre Projekte auswählen können, ist es einfacher, die Leerzeichen wegzulassen.Wenn Sie über eine Dateiauswahl verfügen, müssen Sie diese zulassen.
Betreff: Beste Methode, um ein Python-Objekt in JMP zu importierenSehr coole Art, Run Program zu verwenden
Ich habe keine Lösung, aber das funktioniert in JMP 12.1 auf dem Mac
f = Pick File();
x = RunProgram(
executable("/usr/bin/python"),
options(f),
readfunction("blob")
);
Betreff: Beste Methode, um ein Python-Objekt in JMP zu importierenCraige@JMP
Ich hatte ein Problem mit „Run Program“, das offenbar mit den Optionen und dem Dateinamen zu tun hatte, die ich für „Run Program“ verwende.Wenn ich pick file() verwende, stürzt es bei mir ab.Oder wenn ich ein Verzeichnis mit einem Leerzeichen fest codiere.
Haben Sie Vorschläge, um dies dynamisch zu gestalten?Verwendung von JMP 12.0.1.
Beispiel
f = pick file();
//doesn't work
x = runprogram(executable("C:\Python34\python.exe"),
options(f),
readfunction("blob")
);
//doesn't work
x = runprogram(executable("C:\Python34\python.exe"),
options("/C:/Users/User/Desktop/generate.py"),
readfunction("blob")
);
//doesn't work
x = runprogram(executable("C:\Python34\python.exe"),
options("'C:/Google Drive/Work/Scripting/generate.py'"),
readfunction("blob")
);
//works
x = runprogram(executable("C:\Python34\python.exe"),
options("C:/Users/User/Desktop/generate.py"),
readfunction("blob")
);
Betreff: Beste Methode, um ein Python-Objekt in JMP zu importierenHier ist ein vollständiges Beispiel, das für 1.000.000 Verdoppelungen in etwa 2 Sekunden läuft:
Der Python-Code erstellt ein Array aus Doubles, erstellt eine binäre Bytefolge und schreibt die Bytes nach stdout.Wenn Sie möchten, können Sie eine Datei verwenden. Stellen Sie jedoch sicher, dass diese im Binärmodus (wb) geöffnet ist.Das „>“ am Anfang des Packformats bedeutet „Big Endian“.
„generate.py“
import arrayimport structimport mathimport sys# windows python messes up binary newlines...unless...if sys.platform == "win32": import os, msvcrt msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)bigmat = array.array("d")for x in range(0,1000000): bigmat.append(math.sqrt(x))# %s is replaced by "1000000" ... d is for double precision 8 bytes eachbinary = struct.pack(">%sd" % len(bigmat), *bigmat)# print len(binary) # 8000000 bytessys.stdout.write(binary) Die JSL verwendet runProgram, um das Python-Programm auszuführen, und liest einen Blob aus der Standardausgabe zurück.BlobToMatrix gibt „big“ an, um den Big-Endian-Daten zu entsprechen.Sie könnten LoadTextFile( ...BLOB ) anstelle von runProgram verwenden, wenn Sie das Python-Programm separat ausführen lassen und eine Datei schreiben.Sie benötigen weiterhin blobToMatrix.
„fetch.jsl“
x = runprogram(executable("C:\Python27\python.exe"), options("C:\Users\User\Desktop\pythonExample\generate.py"), readfunction("blob"));xx = blobToMatrix(x,"float",8,"big");// verify...ok="good";for(i=0,i if( xx[i+1] != sqrt(i), ok="bad"));show(ok); ok = „gut“;
http://stackoverflow.com/questions/2374427/python-2-x-write-binary-output-to-stdout hatte die Antwort auf das Problem mit binären Zeilenumbrüchen.
Betreff: Beste Methode, um ein Python-Objekt in JMP zu importierenIch denke, Sie könnten IEEE-Gleitkommadaten oder Ganzzahlen zwischen Python und JMP verschieben 7.1. struct – Bytes als gepackte Binärdaten interpretieren – Python 3.5.0-Dokumentation auf der Python-Seite und blobToMatrix auf der JMP-Seite.Keine Konvertierung zwischen Binär- und Zeichenformat und zurück ins Binärformat wird den Vorgang erheblich beschleunigen. Verwenden Sie eine Datei oder einen Socket dazwischen.Befinden sie sich auf derselben Maschine? das wird es etwas einfacher machen.Nicht die gleiche Maschine? ist möglicherweise kein IEEE-Gleitkomma ...Zeichendaten müssten anders gehandhabt werden, sollten aber einfacher sein als numerische.