面向对像用akshare获取所有沪深A股历史数据,并能断点下载和更新数据
时间: 2024-05-04 21:22:21 浏览: 200
下面是一个简单的面向对象的示例代码,使用 akshare 库获取所有 A 股历史数据,包括断点下载和更新数据的功能:
```python
import akshare as ak
import pandas as pd
import os
class AStockData:
def __init__(self, path="./data"):
self.path = path
if not os.path.exists(path):
os.makedirs(path)
def download(self):
print("Downloading A stock data...")
stock_zh_a_daily_hfq_df = ak.stock_zh_a_daily(symbol="sh000001", adjust="hfq")
stock_zh_a_daily_hfq_df.to_csv(os.path.join(self.path, "sh000001.csv"))
print("Download finished.")
def update(self):
print("Updating A stock data...")
for filename in os.listdir(self.path):
if filename.endswith(".csv"):
symbol = filename.split(".")[0]
data = pd.read_csv(os.path.join(self.path, filename), index_col=0)
last_date = data.index[-1]
new_data = ak.stock_zh_a_daily(symbol=symbol, start_date=last_date, adjust="hfq")
if not new_data.empty:
new_data.to_csv(os.path.join(self.path, filename), mode="a", header=False)
print("Update finished.")
def get_data(self):
data = {}
for filename in os.listdir(self.path):
if filename.endswith(".csv"):
symbol = filename.split(".")[0]
data[symbol] = pd.read_csv(os.path.join(self.path, filename), index_col=0)
return data
```
在这个类中,我们首先定义了一个构造函数 `__init__`,用于初始化数据保存路径。然后定义了一个 `download` 方法,用于下载所有 A 股历史数据,以沪深 300 指数作为示例。接下来,我们定义了一个 `update` 方法,用于更新已有数据,该方法会读取已有数据的最后一天日期,然后从该日期开始下载最新数据。最后,我们定义了一个 `get_data` 方法,用于获取已有的所有 A 股历史数据。
使用这个类,我们可以很方便地下载、更新和获取 A 股历史数据:
```python
data = AStockData()
data.download() # 下载所有 A 股历史数据
data.update() # 更新已有数据
all_data = data.get_data() # 获取所有 A 股历史数据
```
这个类还可以进一步优化,比如增加断点续传功能等。
阅读全文