使用GPXPY解析gpx文件会导致格式不正确的无效令牌

2024-05-17 15:36:47 发布

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

我有一些gpx文件,我想解析,然后输入到一个GIS格式。我下载了gpxpy,因为我需要它的一些函数,而不是只想从文件中提取lat和lon。但当我做解析器的时候

import gpxpy
p = gpxpy.parse(path_to_gpx_file)

它给我的是:

^{pr2}$

在搜索了一段时间之后,这让我怀疑xml结构中存在错误。但是,我找不到他们。在

我用http://www.validome.org/xml/validate/来验证文件,但它说它们是有效的。在

这就是我的gpx文件的样子。我已经把这个减少到只包含3个trackpoint,但是它仍然给了我与完整(35k行)文件相同的错误。在

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<gpx xmlns="http://www.topografix.com/GPX/1/1"
     xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3"
     xmlns:wptx1="http://www.garmin.com/xmlschemas/WaypointExtension/v1"
     xmlns:gpxtpx="http://www.garmin.com/xmlschemas/TrackPointExtension/v1"
     creator="Dakota 20" version="1.1"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www8.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/WaypointExtension/v1 http://www8.garmin.com/xmlschemas/WaypointExtensionv1.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd">
    <metadata>
        <link href="http://www.garmin.com">
            <text>Garmin International</text>
        </link>
        <time>2015-03-01T16:59:53Z</time>
    </metadata>
    <trk>
        <name>SKI1</name>
        <extensions>
            <gpxx:TrackExtension></gpxx:TrackExtension>
        </extensions>
        <trkseg>
            <trkpt lat="43.3737357836" lon="130.0217922572">
                <ele>166.26</ele>
                <time>2015-03-01T08:34:40Z</time>
            </trkpt>
            <trkpt lat="43.3737673834" lon="130.0218102783">
                <ele>166.22</ele>
                <time>2015-03-01T08:34:42Z</time>
            </trkpt>
            <trkpt lat="43.3737869971" lon="130.0217925087">
                <ele>166.78</ele>
                <time>2015-03-01T08:35:02Z</time>
            </trkpt>
        </trkseg>
    </trk>
</gpx>

编辑可能应该添加:使用python2.6、gpxpy0.9.8、pycharm 3.1.1


Tags: 文件comhttptimewwwgpxgarminxsd
2条回答

在我看来,它在任何地方都没有被记录下来,所以我会把它贴在这里。与其让解析器尝试打开文件,不如先生成一个file对象,然后将其提供给解析器,因此:

import gpxpy
f = open(path_to_gpx_file, 'r')
p = gpxpy.parse(f)

我不知道为什么我以前没试过。。。在

以下是parse函数的当前文档:

In [4]: import gpxpy

In [5]: gpxpy.parse?
Signature: gpxpy.parse(xml_or_file, parser=None)
Docstring:
Parse xml (string) or file object. This is just an wrapper for
GPXParser.parse() function.

parser may be 'lxml', 'minidom' or None (then it will be automatically
detected, lxml if possible).

xml_or_file must be the xml to parse or a file-object with the XML.
File:      ~/venv/gpxpy-test/lib/python3.4/site-packages/gpxpy/__init__.py
Type:      function

它指定您需要传入一个xml字符串或一个file对象,但没有说明接受文件名路径。在

相关问题 更多 >