python lxml save不工作

2024-09-29 00:16:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下脚本-

count = 1
for line in temp:
    if (str(count) + '=') in line:
        job = re.findall(re.escape('=')+"(.*)",line)[0]

        fullsrcurl = self.srcjson + '?format=xml&jobname=' + job
        srcfile = urllib2.urlopen(fullsrcurl)
        srcdoc = etree.parse(srcfile)
        srcdata = etree.tostring(srcdoc, pretty_print=True)
        srcjobmst_id = srcdoc.xpath('//jobmst_id/text()')[0]
        srcxml = 'c:\\temp\\deployments\\%s\\%s.xml' % (source_env, srcjobmst_id)
        srcxmlsave = open(srcxml, 'w')
        srcxmlsave.write(srcdata)
        srcxmlsave.close

        fulldsturl = self.targetjson + '?format=xml&jobname=' + job
        dstfile = urllib2.urlopen(fulldsturl)
        dstdoc = etree.parse(dstfile)
        dstdata = etree.tostring(dstdoc, pretty_print=True)
        dstjobmst_id = dstdoc.xpath('//jobmst_id/text()')[0]
        dstxml = 'c:\\temp\\deployments\\%s\\%s.xml' % (target_env, dstjobmst_id)
        dstxmlsave = open(dstxml, 'w')
        dstxmlsave.write(dstdata)
        dstxmlsave.close

        print "Job = " + job
        count += 1

它在两个环境中运行两个不同的api,但数据几乎完全相同。源代码工作正常,只要它尝试对目标数据执行任何操作,我就会得到以下错误-

Traceback (most recent call last):
  File "S:\Operations\Tidal\deployment\deployv2.py", line 213, in <module>
    main()
  File "S:\Operations\Tidal\deployment\deployv2.py", line 209, in main
    auto_deploy.deploy()
  File "S:\Operations\Tidal\deployment\deployv2.py", line 173, in deploy
    dstdoc = etree.parse(dstfile)
  File "lxml.etree.pyx", line 3239, in lxml.etree.parse (src\lxml\lxml.etree.c:6
9970)
  File "parser.pxi", line 1770, in lxml.etree._parseDocument (src\lxml\lxml.etre
e.c:102272)
  File "parser.pxi", line 1790, in lxml.etree._parseFilelikeDocument (src\lxml\l
xml.etree.c:102531)
  File "parser.pxi", line 1685, in lxml.etree._parseDocFromFilelike (src\lxml\lx
ml.etree.c:101457)
  File "parser.pxi", line 1134, in lxml.etree._BaseParser._parseDocFromFilelike
(src\lxml\lxml.etree.c:97084)
  File "parser.pxi", line 582, in lxml.etree._ParserContext._handleParseResultDo
c (src\lxml\lxml.etree.c:91290)
  File "parser.pxi", line 683, in lxml.etree._handleParseResult (src\lxml\lxml.e
tree.c:92476)
  File "parser.pxi", line 622, in lxml.etree._raiseParseError (src\lxml\lxml.etr
ee.c:91772)
lxml.etree.XMLSyntaxError: Extra content at the end of the document, line 4, col
umn 1

因此,目标/目标xml必须有所不同,但我很难理解是什么。当我在浏览器中查看这两个值时,除了少数值(jobmst\u id)之外,它们是相同的


Tags: insrcidparserparsecountlinejob
2条回答

如果将来有人遇到这样的问题,我会发现问题所在,而这与lxml或我正在生成的xml无关。我的源环境已经使用mod\u wsgi进行了产品化,但是目标环境仍然使用runserver。你知道吗

我猜编码中有些东西和目标有冲突。我只是把目标环境产品化了,效果很好。你知道吗

你不能关闭文件。将srcxmlsave.close更改为srcxmlsave.close()或使用上下文管理器,如中所示

with open(srcxml, 'w') as srcxmlsave:
    srcxmlsave.write(srcdata)

相关问题 更多 >