美文网首页程序员
Jupyterhub的notebook中自定义魔法命令

Jupyterhub的notebook中自定义魔法命令

作者: 北邮郭大宝 | 来源:发表于2020-07-16 21:43 被阅读0次

    在Jupyterhub的notebook中,可能会用到一些魔法命令简化操作。通过%lsmagic可以查看所有注册的命令


    1594732812712.jpg

    此外更常用的是需要自定义一些魔法命令,以便更好的与自己的项目结合。

    官网中提供了通过装饰器+函数的方式自定义魔术命令的方式,我这里举个demo,自定义%locate命令,实现调用百度API查询经纬度的需求。

    功能目标:在jupyterhub的notebook中自定义locate命令,并通过%locate <path> 返回path路径下文档中地点的坐标。

    首先编写utils.py,实现基本的功能,通过调用百度API返回坐标。

    import json
    import requests
    from IPython.core.magic import register_line_magic
    
    
    @register_line_magic
    def locate(path):
        with open(path, 'r') as f:
          for line in f.readlines():
            address = line.strip()
            url = get_url(address)
            print(get_position(url))
    
    
    def get_url(address):
      ak = 'XXXXXXXXXXX'  # ak是在百度地图API秘钥
      return f'http://api.map.baidu.com/geocoding/v3/?address={address}&output=json&ak={ak}'
    
    def get_position(url):
      res = requests.get(url)
      data = json.loads(res.text)
      if data['status'] == 0:
        lng = data['result']['location']['lng']
        lat = data['result']['location']['lat']
      else:
        return None
      return lng,lat
    

    为了能每次启动notebook都让命令生效,目前还没找到在jupyterhub中比较好的办法,如果是Ipython中可以把脚本保存在.ipython\profile_default\startup\

    目前临时的解决办法是先写一个脚本scrip.py。

    from utils import *
    

    通过Dockerfile打包到singleruser的镜像里,看起来像这样

    COPY utils /home/jovyan/utils
    
    1594906416316.jpg

    准备测试数据,在/work/data.txt里填写地点

    1594906390579.jpg

    每次使用前先执行脚本,然后就可以通过%locate <path>执行自定义的命令

    1594906242613.jpg

    相关文章

      网友评论

        本文标题:Jupyterhub的notebook中自定义魔法命令

        本文链接:https://www.haomeiwen.com/subject/czamhktx.html