我正在编写一个脚本,它将使用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方法进行适当的更改来实现它?希望你知道我的意思:)
干杯
我只是尝试用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) 我想知道是否有一个相当于jython的PHP,所以你可以使用PHP的java类?
谢谢
更新/解决方案:答案如下,来自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) 在Jython WebSphere Wsadmin中:
看来我可以从nodeName获取服务器的名称,但是我还没有设法找到找到服务器的nodeName的直接方法.
我考虑过创建所有节点的地图,但这很昂贵.
有人可以帮忙吗?
我试图水平翻转图像.
由此:
对此:

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

我试图扭转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) 如何确定底层操作系统,jython正在运行.不是'java',而是'nt'或'posix'.
通过文档查看JSVGCanvas,似乎我可能无法做到这一点.但是,这很有意义.如何JSVGCanvas从String变量而不是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整数与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 …
我想知道是否可以使用JavaFX设计GUI,然后再结合一些Python代码(例如,使用JavaFX创建按钮,然后在Python中编写处理程序代码以提供某些功能)。
JavaFX非常适合设计一个非常好的GUI,我需要Python来控制机器人(这些库仅在Python中可用)。
我在网上浏览了一下,发现了Jython,但是我不明白它是否允许我使用这些第三方Python库。
有没有人有好的建议或我可以看的任何资料?任何信息,将不胜感激。
先感谢您。
jython ×10
python ×6
java ×4
batik ×1
command-line ×1
image ×1
jes ×1
jython-2.7 ×1
linux ×1
lotus-notes ×1
php ×1
svg ×1
swing ×1
websphere ×1