标签: jython

字典或If语句,Jython

我正在编写一个脚本,它将使用dom4j从HTML中获取某些信息.

由于Python/Jython没有本机switch语句,所以我决定使用一大堆调用适当方法的if语句,如下所示:

if type == 'extractTitle':
    extractTitle(dom)
if type == 'extractMetaTags':
    extractMetaTags(dom)
Run Code Online (Sandbox Code Playgroud)

我将添加更多内容,具体取决于我想从HTML中提取哪些信息,并考虑采用我在本网站其他地方找到的字典方法,例如:

{
    'extractTitle':    extractTitle,
    'extractMetaTags': extractMetaTags
}[type](dom)
Run Code Online (Sandbox Code Playgroud)

我知道每次运行脚本时都会构建字典,但同时如果我要使用if语句,脚本必须检查所有这些字段,直到找到正确的字符.我真的很想知道哪一个表现更好或者通常更好的做法?

更新: @Brian - 感谢您的回复.我有一个问题,如果任何提取方法需要多个对象,例如

handle_extractTag(self, dom, anotherObject)
# Do something
Run Code Online (Sandbox Code Playgroud)

您如何对handle方法进行适当的更改来实现它?希望你知道我的意思:)

干杯

python jython switch-statement

4
推荐指数
1
解决办法
2997
查看次数

与Jython的BeautifulSoup

我只是尝试用Jython(2.5.1)运行BeautifulSoup(3.1.0.1),我惊讶地发现它比CPython慢​​多少.使用CPython 解析页面(http://www.fixprotocol.org/specifications/fields/5000-5999)只需不到一秒钟(确切地说是0.844秒).使用Jython需要564秒 - 几乎是700倍.

谁能证实这个结果?Jython运行速度比CPython慢​​700倍似乎不合理.也许我的设置有问题.

[编辑]这是我用来测试它的代码(当然我下载了上面提到的HTML文件):

import time
from BeautifulSoup import BeautifulSoup
data = open("fix-5000-5999.html").read()
start = time.time()
soup = BeautifulSoup(data)
print time.time() - start
Run Code Online (Sandbox Code Playgroud)

python jython beautifulsoup

4
推荐指数
1
解决办法
1694
查看次数

php相当于jython?

我想知道是否有一个相当于jython的PHP,所以你可以使用PHP的java类?

谢谢

php python java jython

4
推荐指数
2
解决办法
471
查看次数

Python sys.argv [1:]没有获取命令行选项

更新/解决方案:答案如下,来自Zack.确实,问题是脚本文件本身的DOS行结尾,clenotes.cmd.由于我对各种文件非常了解,我删除了整个目录,然后从HERE重新下载了一份新的副本.我在文件上运行了Zack的perl脚本,就像这样:

perl -pi.bak -e 's/[ \t\r]+$//' clenotes.cmd
Run Code Online (Sandbox Code Playgroud)

然后我稍微编辑了命令执行,以便最终脚本变为:

CWD=`dirname $0`
JYTHON_HOME="$CWD"
LIB_DIR="$JYTHON_HOME/lib"
NOTES_HOME="/opt/ibm/lotus/notes/"
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$NOTES_HOME
java -cp "$LIB_DIR" -jar "$LIB_DIR/jython.jar" -Djython.home="$CWD/" -Dpython.path="$LIB_DIR:$CWD/ext" -Djava.library.path="$NOTES_HOME" "$LIB_DIR/clenotes/cletes/clenotes.py" "$@"
Run Code Online (Sandbox Code Playgroud)

就是这样 - 其他一切都奏效了.不需要对clenotes.py或clenotes.cfg进行编辑.非常感谢你坚持这个问题,我觉得这个问题很简单.


更新:我正在减少一些代码,使其更具可读性并从帖子中删除不必要的信息.


我正在尝试让Lotus Notes命令行在 Linux上运行,并且在python文件中遇到与sys.argv [1:]相关的问题.Windows脚本在这里:

@echo off
@setlocal 
set CWD=%~dp0
set JYTHON_HOME=%CWD%
set LIB_DIR=%JYTHON_HOME%/lib
java -cp %LIB_DIR% -jar %LIB_DIR%/jython.jar -Djython.home=%CWD%  -python.path=%LIB_DIR%;%CWD%/ext %LIB_DIR%/clenotes/clenotes.py  %*

@endlocal
Run Code Online (Sandbox Code Playgroud)

我在变量方面遇到了困难,所以对于Linux来说,它看起来像这样:

java -cp ./lib/ -jar ./lib/jython.jar -Djython.home=./ -Dpython.path=./lib:./ext -Djava.library.path=/opt/ibm/lotus/notes/ ./lib/clenotes/clenotes.py $*
Run Code Online (Sandbox Code Playgroud)

我在目录中运行它.无论如何,让我感到困惑的是它没有从命令行中获取任何选项.clenotes.cmd --help结果是

No commands specified. Use --help option …
Run Code Online (Sandbox Code Playgroud)

python linux command-line lotus-notes jython

4
推荐指数
1
解决办法
2079
查看次数

Jython wsadmin:获取服务器的nod​​eName

在Jython WebSphere Wsadmin中:

看来我可以从nodeName获取服务器的名称,但是我还没有设法找到找到服务器的nod​​eName的直接方法.

我考虑过创建所有节点的地图,但这很昂贵.

有人可以帮忙吗?

websphere jython

4
推荐指数
1
解决办法
1万
查看次数

翻转图像Python

我试图水平翻转图像.

由此:

原始图片

对此:

翻转图片

但我一直在镜像中反映它.

像这样:

结果我明白了

我试图扭转x轴索引,我不明白为什么它被分割.

def flip(picture):
    height = getHeight(picture)
    width = getWidth(picture)
    newPicture = makeEmptyPicture(width, height)
    x2 = width-1
    for x in range(0, width):
        y2 = 0
        for y in range(0, height):
            pxl = getPixel(picture, x, y)
            newPxl = getPixel(picture, x2, y2)
            color = getColor(pxl)
            setColor(newPxl, color)
            y2 = y2+1
        x2 = x2-1
    return picture
Run Code Online (Sandbox Code Playgroud)

我剩下的代码:

def d():    
    f = pickAFile()
    picture = makePicture(f)        
    newPicture = copy(picture)        
    writePictureTo(newPicture, r"D:\FOLDER\newPic4.jpg")
    explore(newPicture)
Run Code Online (Sandbox Code Playgroud)

python jython image image-rotation jes

4
推荐指数
3
解决办法
2万
查看次数

jython如何检索操作系统名称

如何确定底层操作系统,jython正在运行.不是'java',而是'nt'或'posix'.

  • platform.platform
  • os.name
  • 和sys.platform只返回'java'

jython

4
推荐指数
1
解决办法
525
查看次数

我可以在没有svg文件的情况下创建JSVGCanvas吗?

通过文档查看JSVGCanvas,似乎我可能无法做到这一点.但是,这很有意义.如何JSVGCanvasString变量而不是File?创建?

我的想法是我可以做类似以下的事情:

String svg = "svg data";
JFrame frame = new JFrame();
JSVGCanvas canvas = new JSVGCanvas();
canvas.setContentsFromString(svg);
frame.add(canvas);
frame.setVisible(true);
Run Code Online (Sandbox Code Playgroud)

我知道我总是可以创建一个临时文件并设置文件的内容JSVGCanvas,但我宁愿避免这种情况.我可以扩展File并覆盖它的方法吗?

注意:我正在使用Jython,但我认为这也与Java相关,因此我使用两个标签.我希望解决方案是Java,但Jython解决方案可行

java swing svg jython batik

4
推荐指数
1
解决办法
400
查看次数

比较Java和Jython类型时的奇怪行为

为什么在将Java整数与Jython中具有相同值的Python整数进行比较时,我会遇到以下行为?

>>> from java.lang import Integer
>>> 10 == Integer(10)
False
>>> 10 <= Integer(10)
True
>>> 10 >= Integer(10)
True
Run Code Online (Sandbox Code Playgroud)

好的,所以我发现两者<=>=运算符都按预期进行评估很奇怪,但却==没有...所以现在让我们检查Java和Jython类型之间的隐式转换:

>>> i = Integer(10)
>>> i == 10
False
Run Code Online (Sandbox Code Playgroud)

我听到你说的其他Java类怎么样?我们试试吧:

>>> from java.lang import Boolean
>>> Boolean(0) == False
False
>>> Boolean(0) == True
False
>>> Boolean(0)  # lets just check it is a Java false not a Python one
false
Run Code Online (Sandbox Code Playgroud)

我是否遗漏了某些东西,或者就像__eq__Java类(我使用的是Jython 2.7)中的魔术(dunder)方法一样简单?

编辑

感谢weston澄清在java中10 == new …

java jython primitive-types comparison-operators jython-2.7

4
推荐指数
1
解决办法
72
查看次数

将JavaFX与Python结合

我想知道是否可以使用JavaFX设计GUI,然后再结合一些Python代码(例如,使用JavaFX创建按钮,然后在Python中编写处理程序代码以提供某些功能)。

JavaFX非常适合设计一个非常好的GUI,我需要Python来控制机器人(这些库仅在Python中可用)。

我在网上浏览了一下,发现了Jython,但是我不明白它是否允许我使用这些第三方Python库。

有没有人有好的建议或我可以看的任何资料?任何信息,将不胜感激。

先感谢您。

python java jython

4
推荐指数
1
解决办法
6214
查看次数