將 python 物件匯入 JMP 的最佳方法<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我有一些 python 程式碼可以在 15 分鐘內產生大約 3 GB 的資料。目前,它正在將資料作為「列」 value1|value2|value3.. 行串流傳輸到文字文件,然後進行一些後處理,將整個文字檔案轉換為 jmp 可以開啟的 csv。拆分值後,csv 檔案最多可包含約 30k 列和 100 到 10k 行。
為了使資料更快地到達 JMP,我想將文字資料直接從 python 會話的記憶體串流到 jmp 會話中。
我已經嘗試使用 pycom 進行一些 ole 自動化,但似乎對 pycom 的調用非常慢,這使得很難在每一行上進行迭代並為該“行”中生成的幾個值更新正確的行。
還有別的辦法嗎? sqlite記憶體表? JSL插座?JMP python API?
回覆:將 python 物件匯入 JMP 的最佳方法克雷格,
沒有太大幫助,但它在 JMP 13 中也可以這樣工作。必須詢問 JMP 支援...也許它會在 JMP 14 中得到修復
回覆:將 python 物件匯入 JMP 的最佳方法感謝您查看它,這是個好問題。
我認為您正在與文件名中嵌入空格的 Windows 命令列行為作鬥爭。在 DOS 框中,您可以像這樣使用引號:

轉義有點難看,但在 JSL 中是這樣的:
runprogram(executable("cmd.exe"), options({"/C","dir \!"c:\Users\chales\Saved Games\!""}), readfunction("text"))我辦公室沒有 python,但我預計它會有相同的行為。如果需要嵌入引號,情況會變得更糟;我正在從事的另一個項目使用了 \",如其中一個答案中所述http://stackoverflow.com/questions/7760545/cmd-escape-double-quotes-in-parameter
如果您要為項目選擇路徑名,則省略空格會更容易。如果您有檔案選擇器,則需要允許它們。
回覆:將 python 物件匯入 JMP 的最佳方法使用運行程式的非常酷的方式
我沒有解決方案,但這適用於 Mac 上的 JMP 12.1
f = Pick File();
x = RunProgram(
executable("/usr/bin/python"),
options(f),
readfunction("blob")
);
回覆:將 python 物件匯入 JMP 的最佳方法克雷格@JMP
我在運行程式時遇到問題,這似乎與我用於運行程式的選項和檔案名稱有關。如果我使用 pick file(),它會崩潰。或者如果我硬編碼一個包含空格的目錄。
您有什麼建議可以讓這種動態變得活躍嗎?使用 JMP 12.0.1。
例子
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")
);
回覆:將 python 物件匯入 JMP 的最佳方法以下是一個完整的範例,大約 2 秒內運行 1,000,000 個雙打:
python 程式碼建立一個雙精度數組,產生一個二進位位元組字串,並將位元組寫入標準輸出。如果您願意,可以使用文件,只需確保它以二進位模式 (wb) 開啟即可。包格式開頭的「">」表示「大端」。
“生成.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) JSL 使用 runProgram 來運行 python 程序,並從 stdout 讀回一個 blob。BlobToMatrix 指定「big」以符合大端資料。如果讓 python 程式單獨運行並寫入文件,則可以使用 LoadTextFile( ...BLOB ) 而不是 runProgram。您仍然需要 blobToMatrix。
“獲取.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); 好的=「好」;
http://stackoverflow.com/questions/2374427/python-2-x-write-binary-output-to-stdout有二進制換行問題的答案。
回覆:將 python 物件匯入 JMP 的最佳方法我認為您可以使用以下命令在 python 和 JMP 之間移動 IEEE 浮點資料或整數7.1. struct — 將位元組解釋為打包的二進位資料 — Python 3.5.0 文檔在 python 端,blobToMatrix 在 JMP 端。二進位和字元之間的轉換以及返回二進位的轉換不會大大加快速度。 在它們之間使用檔案或套接字。他們在同一台機器上嗎?這會讓事情變得更容易一些。不是同一台機器嗎?可能不是 IEEE 浮點...字元資料需要不同的處理,但應該比數字更容易。