如何删除XML/GPX文件的额外内容并使其在Python中再次有效

2024-09-28 19:24:15 发布

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

 ...
    </trk>
</gpx>
        <trkpt lat="53.502100503614564" lon="10.065932731189879">
            <ele>0.0</ele>
            <time>2017-10-15T11:42:39.916+0000</time>
            <speed>0.3</speed>
        </trkpt>

这是我要解析的GPX文件的结尾。不幸的是,使用gpxpylxml我无法解析文件并获得错误消息。所有使用的解析器都无法处理最后用</gpx>结束后的额外内容。似乎他们只能完全解析它,而不能部分解析它。是真的吗?在

我试图通过使用open(gpxfile,'r+').read().find("</gpx>")函数来解决这个问题,以便在使用f.seek(positionOfEnd)之后找到文件的结尾并用f.write('')覆盖任何其他内容。在

不幸的是,使用truncate来截断文件的其余部分在r+写入模式下不起作用。在

我还试图使用etree.iterparse逐行解析文件,但也没有成功。在

这里是我使用的代码:

^{pr2}$

使用gpxpy我得到:

raise mod_gpx.GPXXMLSyntaxException('Error parsing XML: %s' % str(e), e)
gpxpy.gpx.GPXXMLSyntaxException: Error parsing XML: Extra content at the end of the document, line 16, column 3 (line 16)

使用lxml我得到:

File "src\lxml\iterparse.pxi", line 208, in lxml.etree.iterparse.__next__ (src\lxml\etree.c:155949)
File "file:/C:/Users/user.name/Desktop/test/Mission%202.gpx", line 16
lxml.etree.XMLSyntaxError: Extra content at the end of the document, line 16, column 3

我尝试的是:

f = open(path+"\\"+file,'r+')
pos = f.read().find("</gpx>")
f.seek(pos+1)
f.write('testEdit')
f.close

但并没有像预期的那样,把testex放在文件中间的某个地方,但不是放在文件中间的某个地方。在

我怎样才能轻松处理这些问题?我还能试试什么?我用的是Win7和python2.7


Tags: 文件the内容time结尾linegpxopen
1条回答
网友
1楼 · 发布于 2024-09-28 19:24:15

恐怕我的方法不是处理gpx/xml/html数据的好方法,但是您可以尝试一下

import re
from lxml import etree

f = open(gpxfile, 'r')
gpx = re.search(r'\<gpx\>(.|\n)*\<\/gpx\>', f.read()).group(0) # Give you '<gpx>...</gpx>'
tree = etree.fromstring(gpx)

您也可以尝试BeautifulSoup(可能是更好的方法),它可以在<gpx>之外处理<trkpt>标记。在

^{pr2}$

相关问题 更多 >