如何从python中写入和读取java位集?

如何从python中写入和读取java位集?,java,python,bitset,jpype,Java,Python,Bitset,Jpype,我正在使用化学开发工具包计算化学结构的“指纹”。我想把它们保存在一个sql数据库中,但我知道什么是存储和读取数据的最佳方式。我目前正在使用python,因为代码的其他部分在jython中不起作用 我正在使用jpype接口到包 import os from jpype import * _jvm=os.environ["JPYPE_JVM"] _cp=os.environ['CLASSPATH'] startJVM(_jvm, "-Djava.class.path="+_cp) cdk=JPac

我正在使用化学开发工具包计算化学结构的“指纹”。我想把它们保存在一个sql数据库中,但我知道什么是存储和读取数据的最佳方式。我目前正在使用python,因为代码的其他部分在jython中不起作用

我正在使用jpype接口到包

import os
from jpype import *

_jvm=os.environ["JPYPE_JVM"]
_cp=os.environ['CLASSPATH']
startJVM(_jvm, "-Djava.class.path="+_cp)
cdk=JPackage("org").openscience.cdk
完成所有工作的示例部件如下所示:

sp = cdk.smiles.SmilesParser(cdk.DefaultChemObjectBuilder.getInstance())
mol=sp.parseSmiles('CCCCC')    
ECFP=cdk.fingerprint.CircularFingerprinter
fingerp=ECFP(ECFP.CLASS_ECFP6)
fp1 = fingerp.getBitFingerprint(mol).asBitSet()
fp1.toString()
这个输出

out: u'{61, 152, 222, 777, 825, 947, 993}'
请注意,fp1是一个位集

编辑:我无法再次将输出字符串读入位集中

我试过的

fps=fp1.toString()    
bit=java.util.BitSet.valueOf({fps})
这是回报

RuntimeError: No matching overloads found. at src/native/common/jp_method.cpp:121

“高效”是什么意思?它看起来不大,所以你希望它在哪些方面“高效”?@pvg这只是一个例子。这可能需要对超过一百万个不同的文件执行。因此,读/写操作需要尽可能快。只有当您知道它在整个运行时中占了很大一部分时,才需要尽可能快。所以,最明智的做法是,天真地实施它,测量它,如果有问题,回来问一个具体的问题。实际上,这太模糊了,无法回答,任何答案都是猜测。@pvg我一直坚持的部分是将输出字符串读回位集中。我编辑了这个问题来反映这一点。您需要查看这些类的Javadoc
BitSet
没有采用字符串的
valueOf
方法。您可以使用
toLongArray
valueOf
,例如,其他选项也应该从文档中清除。