Python 객체를 JMP로 가져오는 가장 좋은 방법<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />15분 동안 약 3GB의 데이터를 생성할 수 있는 Python 코드가 있습니다.현재 "열" value1|value2|value3.. 라인으로 데이터를 텍스트 파일로 스트리밍하고 있으며, 그런 다음 전체 텍스트 파일을 jmp가 열 수 있는 csv로 변환하기 위해 일부 후처리를 수행합니다.csv 파일은 값을 분할한 후 최대 30,000개의 열과 100~10,000개의 행을 포함할 수 있습니다.
데이터가 JMP에 더 빨리 전달되도록 하기 위해 Python 세션의 메모리에서 직접 텍스트 데이터를 jmp 세션으로 스트리밍하고 싶습니다.
나는 pycom을 사용하여 몇 가지 자동화를 시도했지만 pycom에 대한 호출이 매우 느려서 각 줄을 반복하고 해당 "줄"에서 생성되는 몇 가지 값에 대해 올바른 행을 업데이트하기 어렵게 만드는 것 같습니다.
다른 방법이 있나요? sqlite 메모리 테이블? JSL 소켓?JMP 파이썬 API?
Re: Python 객체를 JMP로 가져오는 가장 좋은 방법크레이그,
별로 도움이 되지는 않지만 JMP 13에서도 이런 방식으로 작동합니다. JMP 지원팀에 문의해야 합니다...어쩌면 JMP 14에서 수정될 수도 있습니다.
Re: 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
프로젝트의 경로 이름을 선택하는 경우 공백을 생략하면 더 쉬워집니다.파일 선택기가 있는 경우 이를 허용해야 합니다.
Re: Python 객체를 JMP로 가져오는 가장 좋은 방법Run Program을 사용하는 아주 멋진 방법
해결책은 없지만 Mac의 JMP 12.1에서는 작동합니다.
f = Pick File();
x = RunProgram(
executable("/usr/bin/python"),
options(f),
readfunction("blob")
);
Re: Python 객체를 JMP로 가져오는 가장 좋은 방법크레이지@JMP
Run Program에 사용하는 옵션 및 파일 이름과 관련된 것으로 보이는 Run Program에 문제가 있었습니다.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")
);
Re: Python 객체를 JMP로 가져오는 가장 좋은 방법다음은 1,000,000 doubles에 대해 약 2초 안에 실행되는 완전한 예입니다.
파이썬 코드는 double 배열을 만들고, 바이트의 이진 문자열을 만들고, 바이트를 stdout에 씁니다.원하는 경우 파일을 사용할 수 있습니다. 바이너리 모드(wb)로 열려 있는지 확인하세요.팩 형식 시작 부분의 ">"는 "빅 엔디안"을 의미합니다.
"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) JSL은 runProgram을 사용하여 Python 프로그램을 실행하고 stdout에서 blob을 다시 읽습니다.BlobToMatrix는 빅 엔디안 데이터와 일치하도록 "big"을 지정합니다.Python 프로그램을 별도로 실행하고 파일을 작성하는 경우 runProgram 대신 LoadTextFile( ...BLOB )을 사용할 수 있습니다.여전히 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); 알았어 = "좋아요";
http://stackoverflow.com/questions/2374427/python-2-x-write-binary-output-to-stdout 바이너리 개행 문제에 대한 답을 얻었습니다.
Re: Python 객체를 JMP로 가져오는 가장 좋은 방법다음을 사용하여 Python과 JMP 간에 IEEE 부동 소수점 데이터 또는 정수를 이동할 수 있다고 생각합니다. 7.1. struct — 바이트를 압축된 이진 데이터로 해석 — Python 3.5.0 문서 Python 쪽에서는 blobToMatrix는 JMP 쪽에서는 그렇습니다.바이너리와 문자 사이를 변환하지 않고 다시 바이너리로 변환하면 속도가 훨씬 빨라집니다. 그 사이에 파일이나 소켓을 사용하십시오.같은 컴퓨터에 있습니까? 그러면 조금 더 쉬워질 것입니다.같은 기계 아닌가요? IEEE 부동 소수점이 아닐 수도 있습니다 ...문자 데이터는 다른 처리가 필요하지만 숫자보다 더 쉽습니다.