Tushare数据自动缓存

tushare是一个财经数据获取库,内置若干财经数据的获取爬虫,将各种数据的爬取封装在了一起。但是tushare有一个很大的缺点,就是其抓取的数据无法缓存在本地。故考虑实现一组自己的api用以缓存tushare数据。

import tushare as ts
industry_info = ts.get_industry_classified()
profit_info = ts.get_profit_data(2017,1)

这是python中获取tushare数据的典型例子,我们考虑实现一个简单的装饰函数,将函数调用以及调用的参数进行记忆化!

ts.get_industry_classified = data_cacher(ts.get_industry_classified)
ts.get_profit_data = data_cacher(ts.get_profit_data)

industry_info = ts.get_industry_classified()
profit_info = ts.get_profit_data(2017,1)

这里面data_cacher函数包装后的ts.api增加了将返回值保存为以“函数名”、“参数”命名的文件中,供下次调用直接使用。

最后,如何实现data_cacher函数呢?直接上代码:

import attr
import pandas as pd

def data_cacher(func):
    def inner_function(*args,**kwargs):
        path = 'data/'+func.__name__
        for w in args:
            path += '&'+str(w)
        for w in kwargs:
            path += '&'+w+'='+str(kwargs[w])
        try:
            data = pd.DataFrame().from_csv(path)
            print("Use cache :",path)
        except FileNotFoundError:
            if 'fast_mode' in kwargs.keys() and kwargs['fast_mode'] == True:
                return pd.DataFrame()
            elif 'fast_mode' in kwargs.keys():
                del kwargs['fast_mode']
            print("Online => ",path)
            data = func(*args,**kwargs)
            #print(data,type(data),len(data))
            if len(data) == 0:
                print("Empty...")
                return data
            data.to_csv(path)
            data = pd.DataFrame().from_csv(path)
        return data
    return inner_function

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据