FAQ > 金融建模 > 第三方交互 > Python

Q:在天软将结果转换成Json串返回到python中解决转码引起的效率低下问题    

  • A:天软的默认编码是GBK,python的默认编码为Unicode,交互过程中字符串需要转码后才能正常显示。
     当天软返回的结果为数组时,按普通的编码解码方式,需要对每个单元格的字符串逐个进行转码,从而引起交互效率低下的问题。
     此时,可借助Json串解决该繁琐问题,其过程为:将天软的结果集转换为Json串后再传入到python中,再调用python中的json模块对json串进行转换。
     这种方式相比于使用循环逐个转码,会更简便高效,当然,若交互的结果集较小,就不存在效率的问题。
    其它相关的方式可
    参考

    交互文档FAQ:2019-05-08-应用专题-第三方交互07:天软平台和PYTHON的交互
    及FAQ:Q:与python3交互中字符串转gbk的问题
    注:相较于将原始数据送入python,Json串转传输方式的效率有显著提升,且由于数据格式压缩,同时一次性传输的数据量也可以更多,所以我们推荐此类方式进行处理。

    其具体做法与使用案例如下:
    相关函数简介:
    天软中:
    天软函数ExportJsonString(data:Any):String,将天软数据结构转换为Json串。

    python中,加载Json模块,调用其loads方法将json串转换为python数据结构。

    应用范例:
    范例01:python中调用天软函数
    天软代码:封装函数getdata

    //将上证指数日线行情转换成标准的JSON串
    Function getdata()
    begin
    setsysparam(PN_Cycle(),cy_day());
    data:=select * from markettable datekey 20200721T to 20200721T+0.999 of 'SH000001' end;
    t:=exportjsonstring(data);
    return t;
    end


    Python代码:

    import sys
    sys.path.append(天软安装目录)
    import json
    import TSLPy3 as ts
    data=ts.RemoteCallFunc("getdata",[],{})[1]
    if data:
      print('数据传输成功')
      d=json.loads(data)
      print(d)
    else:
      print('数据传输失败')

    范例02:python中执行天软脚本
    //提取一段时间内的交易明细

    import sys
    sys.path.append(天软安装目录)
    import json
    import TSLPy3 as ts
    s="""
    data:=select * from tradetable datekey 20200721.1020T to 20200721.1025T of 'SH000001' end;
    t:=exportjsonstring(data);
    return t;
    """;
    data = TSLPy3.RemoteExecute(s,{})
    print(json.loads(data[1]))