python sax解析大浮点数

时间:2012-01-31 20:07:51

标签: python python-2.6

好的,这是故事。我在xml文件中保存了大的浮点数。例如0.016780745002189634。数字在文件中正确保存,但是当我解析xml并且我读取它们时,其中一些(我用最大的数据)sax将它们分成两个不同的数字。喜欢:0.016780和745002189634。 我正在使用utf-8编码,如果它有事情要做,尝试iso同样的问题,不同的结果思想。 提前致谢

import xml.sax
from xml.sax.saxutils import XMLGenerator
from xml.sax.xmlreader import AttributesNSImpl


floattosave = 0.016780745002189634
def xmlindex():
    logger = XMLGenerator(open('.\\a.xml','w'), 'utf-8')
    logger.startDocument()
    attrs = AttributesNSImpl({}, {})
    logger.startElementNS((None,'Articles'), 'Articles', attrs)
    attr_vals = {
        (None, 'id'): str(1)
        }
    attr_qnames = {
        (None, 'id'): 'id'
        }
    attrs = AttributesNSImpl(attr_vals, attr_qnames)
    logger.startElementNS((None, 'Article'), u'Article', attrs)
    attr_vals1 = {
    (None, 'word'): 'lalala'
    }
    attr_qnames1 = {
    (None, 'word'): 'word'}
    attrs1 = AttributesNSImpl(attr_vals1, attr_qnames1)
    logger.startElementNS((None, 'Lemma'), 'Lemma', attrs1)
    logger.characters(repr(floattosave))
    logger.endElementNS((None, 'Lemma'), 'Lemma')
    logger.endElementNS((None, 'Article'), 'Article')
    logger.endElementNS((None, 'Articles'), 'Articles')
    logger.endDocument()



class myhandler(xml.sax.ContentHandler):
        def __init__(self):
            xml.sax.ContentHandler.__init__(self)
            self.w = 0
            self.child = 0
        def startElement(self,name,attrs):
            if name == 'Article':
                self.child = 1
            if name == 'Lemma':
                self.child = 2
        def characters(self, content):
            if self.child == 2:
                print content
                a = float(content)
                print a
xmlindex()
xml.sax.parse(open('.\\a.xml'),myhandler())

嗯,我做了类似的事情,但还有更多的元素。这是一个工作得很好,我猜其他地方是问题。我会调查一下。你帮助了很多tkx

1 个答案:

答案 0 :(得分:2)

这与文本是否代表浮点数无关 - XML解析器不关心消费者认为文本的含义。

您的问题已记录在案here

  

ContentHandler.characters(内容)

Receive notification of character data.
     

Parser将调用此方法来报告每个字符数据块。    SAX解析器可以在单个中返回所有连续的字符数据   大块,或者他们可能将它分成几个块; 然而,所有的   任何单个事件中的字符必须来自同一个外部实体   以便定位器提供有用的信息。

您有责任将块粘在一起。在startElement处理程序中,初始化存储。在characters处理程序中,将传入的块添加到存储中。在endElement处理程序中,对存储执行某些操作。