java与python结合使用_Java与Python之间使用jython工具类实现数据交互

最近有个功能需要java与python之间的数据交互,java需要把参数传给python,然后python计算的结果返回给java.于是就写了一个工具类.

首先,maven 需要加载jython的依赖.工具类代码如下:

import java.util.List;

import java.util.Map;

import java.util.Properties;

import org.apache.poi.ss.formula.functions.T;

import org.python.core.PyFunction;

import org.python.core.PyInteger;

import org.python.core.PyObject;

import org.python.core.PyString;

import org.python.util.PythonInterpreter;

/**

* @ClassName: JythonUtils

* @Description:TODO(jython 工具类)

* @author: zy

* @date:

*

* @Copyright: 2018 Inc. All rights reserved.

* 注意:

*/

public class JythonUtils {

/**

* @Title: jythonInit

* @Description: TODO(初始化jython)

* @param: @return

* @return: PythonInterpreter

* @throws

*/

public static PythonInterpreter jythonInit(){

//初始化site 配置

Properties props = new Properties();

props.put("python.home", ""); //python Lib 或 jython Lib,根据系统中该文件目录路径

props.put("python.console.encoding", "UTF-8");

props.put("python.security.respectJavaAccessibility", "false");

props.put("python.import.site", "false");

Properties preprops = System.getProperties();

PythonInterpreter.initialize(preprops, props, new String[0]);

//创建PythonInterpreter 对象

PythonInterpreter interp = new PythonInterpreter();

return interp;

}

/**

* @Title: loadPythonFile

* @Description: TODO(加载python 源码文件,)

* @param: @param interp

* @param: @param filePath ,比如:F:\\jpython_jar\\jpythonTest\\pythonTest.py 或/testpython/test.py

* @param: @return

* @return: PythonInterpreter

* @throws

*/

public static PythonInterpreter loadPythonFile(PythonInterpreter interp, String filePath){

interp.execfile(filePath);

return interp;

}

/**

* @Title: loadPythonFunc

* @Description: TODO(加载python 源码文件中的某个方法)

* @param: @param interp

* @param: @param functionName

* @param: @return

* @return: PyFunction

* @throws

*/

public static PyFunction loadPythonFunc(PythonInterpreter interp, String functionName){

//加载方法

PyFunction func = (PyFunction) interp.get(functionName,PyFunction.class);

return func;

}

/**

* @Title: execFunc

* @Description: TODO(执行无参方法,返回PyObject)

* @param: @param func

* @return: PyObject

* @throws

*/

public static PyObject execFunc(PyFunction func){

PyObject pyobj = func.__call__();

return pyobj;

}

/**

* @Title: execFuncToString

* @Description: TODO(执行无参方法,返回一个字符串)

* @param: @param func

* @param: @return

* @return: String

* @throws

*/

public static String execFuncToString(PyFunction func){

PyObject pyobj = execFunc(func);

return (String) pyobj.__tojava__(String.class);

}

/**

* @Title: execFuncToString

* @Description: TODO(执行有参方法,返回一个字符串)

* @param: @param func

* @param: @param paramName ,参数名

* @param: @return

* @return: String

* @throws

*/

public static String execFuncToString2(PyFunction func, String paramName){

PyObject pyobj = func.__call__(new PyString(paramName));

return (String) pyobj.__tojava__(String.class);

}

/**

* @Title: execFuncToInteger

* @Description: TODO(执行无参方法,返回一个Integer)

* @param: @param func

* @param: @return

* @return: Integer

* @throws

*/

public Integer execFuncToInteger(PyFunction func){

PyObject pyobj = execFunc(func);

return (Integer) pyobj.__tojava__(Integer.class);

}

/**

* @Title: execFuncToList

* @Description: TODO(执行无参方法,返回一个List)

* @param: @param func

* @param: @return

* @return: List

* @throws

*/

public List execFuncToList(PyFunction func){

PyObject pyobj = execFunc(func);

return (List) pyobj.__tojava__(List.class);

}

/**

* @Title: execFuncToMap

* @Description: TODO(执行无参方法,返回一个Map)

* @param: @param func

* @param: @return

* @return: Map

* @throws

*/

public Map execFuncToMap(PyFunction func){

PyObject pyobj = execFunc(func);

return (Map) pyobj.__tojava__(Map.class);

}

public void execFuncToByParamsList(PyFunction func, List paramsList){

}

public static void main(String[] args){

PythonInterpreter interp = jythonInit();

//文件名

String filePath = "F:\\jpython_jar\\jpythonTest\\pythonTest.py";

interp = loadPythonFile(interp, filePath);

//函数名

String functionName = "count";

PyFunction func = loadPythonFunc(interp, functionName);

//执行无参方法,返回PyObject

PyObject pyobj = execFunc(func);

//执行无参方法,返回String

String resultStr = execFuncToString(func);

//执行有参方法,返回String

String paramName = "name";

String resultStr2 = execFuncToString2(func, paramName);

}

}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值