码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Java操作Python数据交互最佳实践


    Java操作Python最佳实践

      • 1、Java与Python的互操作性
      • 2、Java调用Python脚本及数据交互
        • 2.1、准备工作
        • 2.2、执行一段Python代码
        • 2.3、执行Python文件脚本
        • 2.4、执行Python文件中的指定方法
        • 2.5、执行含有第三方库的Python文件
      • 3、附录(完整代码)


    1、Java与Python的互操作性


    在当今的软件开发领域,Java和Python都是备受欢迎的编程语言。Java以其跨平台性和可扩展性而闻名,而Python则因其简洁性和丰富的生态系统而备受喜爱。许多项目需要这两种语言之间的互操作性,以充分发挥它们的优势。本文将深入探讨Java和Python之间的互操作性,并通过具体实例分析,展示如何在这两种语言之间实现无缝的集成

    在这里插入图片描述
    Java和Python是两种常用的编程语言,分别在不同的领域有着广泛的应用。Java以其强大的跨平台能力和丰富的生态系统闻名,常用于大规模的企业应用程序开发。而Python则以其简洁的语法和强大的数据处理能力受到广大开发者的喜爱,常用于科学计算、数据分析和人工智能等领域

    在许多情况下,Java和Python之间的互操作性是非常重要的。例如,在一个大型企业系统中,Java可能用于后端服务和业务逻辑,而Python可能用于数据分析和机器学习任务。在这种情况下,两种语言需要能够协同工作,以实现全面的功能

    而实现Java与Python的互操作性,可能需要使用到Jython

    Jython是Python语言在Java平台的实现。Jython是一个使用Java虚拟机(JVM)作为运行环境的Python解释器。它允许你在Java平台上运行Python代码

    2、Java调用Python脚本及数据交互

    2.1、准备工作

    1)Python脚本准备

    首先,准备两个Python脚本,一个仅使用Python内置模块(库),另一个使用第三方库。本案例将演示Java如何调用包含与不包含Python第三方库的Python脚本,并传入与返回数据。以及解决最佳实践过程中所遇到的一些坑

    A、java2python.py仅使用Python内置模块,内容如下:

    # coding:utf-8
    
    from datetime import datetime
    
    print(datetime.now().strftime("%Y%m%d"))
    
    name = 'Tom'
    age = 18
    
    def add(x, y):
        return x + y
    
    # Jython不支持Python文件中字符串格式化:f"str{var}"
    def hello(n):
        return "Hello!" + n
    
    def no():
        print("无返回值!")
    
    if __name__ == '__main__':
        print(hello("hello方法"))
        print(add(3, 5))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    B、java2python1.py使用了Python第三方库,内容如下:

    import numpy as np
    import pandas as pd
    import sys
    
    df = pd.DataFrame({
       'name': ['Tom', '中文'], 'age': [18, np.nan]})
    print(df.to_string())
    
    def method(name, age):
        return {
       "name": name, "age": age}
    
    if __name__ == '__main__':
        print(f"正在执行Python脚本: {
         sys.argv[0]}")
        print(f"接收到Java传递的参数: {
         sys.argv[1:]}")
        print("正在处理数据...等待返回!")
        res = method(sys.argv[1], sys.argv[2])
        print(res)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    2)Java项目准备

    创建Maven项目,在pom.xml中导入需要使用的依赖:

    
    <dependency>
        <groupId>org.pythongroupId>
        <artifactId>jython-standaloneartifactId>
        <version>2.7.3version>
    dependency>
    <dependency>
        <groupId>junitgroupId>
        <artifactId>junitartifactId>
        <version>4.13.1
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    双靶向融合蛋白标记的红细胞膜包裹PLGA微球/细胞膜拮抗联合纳米酶的仿生制备
    【智能优化算法-遗传算法】基于遗传算法求解单目标优化问题(实数编码)附matlab代码
    JDK动态代理深入剖析
    Cheerleaders UVA - 11806
    HTML+CSS简单漫画网页设计成品 蜡笔小新3页 大学生个人HTML网页制作作品
    JavaScript 任务池
    舵机电流测试
    晦涩难懂的hashmap源代码-put方法解析
    springBoot如何【禁用Swagger】
    Matlab--高等应用数学问题的MATLAB求解
  • 原文地址:https://blog.csdn.net/weixin_55629186/article/details/133942746
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号