Skip to main content

用于操作开放旅行数据的 Python 库

项目描述

极简GeoBases 实施:

  • 没有依赖关系

  • 兼容 Python 3.6+、CPython 和 PyPy

  • 一个数据源: opentraveldata

  • 一个 Python 模块,用于更轻松地在集群上分发(如 Hadoop)

  • 更快的加载时间 (5x)

  • 用 pytest 和 tox 测试

>>> from neobase import NeoBase
>>> b = NeoBase()
>>> b.get('ORY', 'city_code_list')
['PAR']
>>> b.get('ORY', 'city_name_list')
['Paris']
>>> b.get('ORY', 'country_code')
'FR'
>>> b.distance('ORY', 'CDG')
34.87...
>>> b.get_location('ORY')
LatLng(lat=48.72..., lng=2.35...)

安装

使用 Python 包:

pip install neobase

文档

查看API 的readthedocs

初始化时可以自定义源数据:

with open("file.csv") as f:
    N = NeoBase(f)

否则加载的文件将是嵌入文件,除非设置了OPTD_POR_FILE环境变量。在这种情况下,它将从该变量中定义的路径加载。

您也可以自己手动检索最新的数据源,但如果数据中发生了一些重大更改,您将面临一些重大更改。

from io import StringIO
from urllib.request import urlopen

from neobase import NeoBase, OPTD_POR_URL

data = urlopen(OPTD_POR_URL).read().decode('utf8')
N = NeoBase(StringIO(data))
N.get("PAR")

有效期的参考日期也可以更改:

N = NeoBase(date="2000-01-01")
N.get("AIY")  # was decommissioned in 2015

默认情况下,参考日期将设置为今天,除非设置了OPTD_POR_DATE环境变量。在这种情况下,它将使用该值。

您可以自定义关于重复的行为:共享相同 IATA 代码的点,例如 NCE 作为机场,NCE 作为城市。默认情况下会保留所有内容,但您可以对其进行设置,以便仅保留带有 IATA 代码的第一个点:

N = NeoBase(duplicates=False)
len(N)  # about 10,000 "only"

请注意,您也可以使用OPTD_POR_DUPLICATES环境变量来控制它:将其设置为0以删除重复项。

最后,您可以自定义通过子类化加载的字段。

class SubNeoBase(NeoBase):
    KEY = 0  # iata_code

    # Those loaded fields are the default ones
    FIELDS = (
        ("name", 6, None),
        ("lat", 8, None),
        ("lng", 9, None),
        ("page_rank", 12, lambda s: float(s) if s else None),
        ("country_code", 16, None),
        ("country_name", 18, None),
        ('continent_name', 19, None),
        ("timezone", 31, None),
        ("city_code_list", 36, lambda s: s.split(",")),
        ('city_name_list', 37, lambda s: s.split('=')),
        ('location_type', 41, None),
        ("currency", 46, None),
    )

N = SubNeoBase()

命令行界面

您可以使用以下方式查询数据:

python -m neobase PAR NCE

测试

tox

发布历史 发布通知| RSS订阅