PYTHON 实现在指定k下插入数据
时间: 2023-06-01 20:07:39 浏览: 53
很高兴回答你的问题。可以使用Python的列表(List)数据结构来实现在指定k下插入数据。具体的实现方法是使用insert()函数,语法为list.insert(index, obj),其中index为要插入的位置,obj为要插入的对象。比如,下面的代码就是在List中的第2个位置插入一个数值为5的元素:
```
my_list = [1, 2, 3, 4]
my_list.insert(1, 5)
print(my_list)
```
输出结果为:[1, 5, 2, 3, 4]。
希望这个回答能够帮助到你!
相关问题
python循环队列
循环队列是一种特殊的队列数据结构,它允许在队列的前端和后端进行插入和删除操作。当队列的末尾达到了队列的最大容量时,插入操作会从队列的前端继续进行,形成一个循环。这种设计可以使队列的空间得到最大的利用。
在Python中,可以使用列表来实现循环队列。可以通过指定一个固定的队列大小,在列表中循环前进和后退来模拟循环队列的操作。插入元素时,可以通过取模运算来确定元素应该插入的位置。删除元素时,可以通过移动头指针来实现。
下面是一个简单的Python代码示例,演示了如何实现循环队列的基本操作:
```python
class CircularQueue:
def __init__(self, k):
self.size = 0
self.capacity = k
self.queue = [None] * k
self.front = 0
self.rear = -1
def enqueue(self, value):
if self.is_full():
return False
self.rear = (self.rear + 1) % self.capacity
self.queue[self.rear] = value
self.size += 1
return True
def dequeue(self):
if self.is_empty():
return False
value = self.queue[self.front]
self.front = (self.front + 1) % self.capacity
self.size -= 1
return value
def is_empty(self):
return self.size == 0
def is_full(self):
return self.size == self.capacity
```
使用tushare pro获取上证仍在交易股票列表,并获取列表中所有股票历时k线数据,一次性保存至另一台电脑(192.168.1.5)mysql中,如果mysql中没有该数据则创建数据库,以后每天下午18点更新当天或缺失的k线数据。
以下是Python代码实现:
```python
import tushare as ts
import pymysql
from datetime import datetime, timedelta
# MySQL数据库连接信息
MYSQL_HOST = "192.168.1.5"
MYSQL_PORT = 3306
MYSQL_USER = "root"
MYSQL_PASSWORD = "password"
MYSQL_DATABASE = "stock_data"
# 获取交易日历
pro = ts.pro_api()
trade_cal = pro.trade_cal(exchange="SSE", start_date="20000101", end_date=datetime.now().strftime("%Y%m%d"))
trade_cal = trade_cal[trade_cal["is_open"] == 1]["cal_date"].tolist()
# 获取上证仍在交易股票列表
stock_list = pro.stock_basic(exchange="SSE", list_status="L", fields="ts_code")["ts_code"].tolist()
# 连接MySQL数据库
conn = pymysql.connect(host=MYSQL_HOST, port=MYSQL_PORT, user=MYSQL_USER, password=MYSQL_PASSWORD)
cursor = conn.cursor()
# 创建数据库
create_database_sql = f"CREATE DATABASE IF NOT EXISTS {MYSQL_DATABASE} DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
cursor.execute(create_database_sql)
conn.commit()
# 切换至指定数据库
use_database_sql = f"USE {MYSQL_DATABASE};"
cursor.execute(use_database_sql)
# 获取所有股票历时k线数据并保存至MySQL数据库
for ts_code in stock_list:
# 查询是否已有该股票数据
query_sql = f"SELECT ts_code FROM daily WHERE ts_code='{ts_code}';"
cursor.execute(query_sql)
result = cursor.fetchone()
# 如果没有该股票数据则新建数据表
if not result:
create_table_sql = f"CREATE TABLE IF NOT EXISTS daily (id INT(11) NOT NULL AUTO_INCREMENT, ts_code VARCHAR(10) NOT NULL, trade_date DATE NOT NULL, open FLOAT(10,2) NOT NULL, high FLOAT(10,2) NOT NULL, low FLOAT(10,2) NOT NULL, close FLOAT(10,2) NOT NULL, pre_close FLOAT(10,2) NOT NULL, change FLOAT(10,2) NOT NULL, pct_chg FLOAT(10,2) NOT NULL, vol FLOAT(20,2) NOT NULL, amount FLOAT(20,2) NOT NULL, PRIMARY KEY (id));"
cursor.execute(create_table_sql)
conn.commit()
# 获取该股票历史k线数据
start_date = "20000101"
query_sql = f"SELECT MAX(trade_date) FROM daily WHERE ts_code='{ts_code}';"
cursor.execute(query_sql)
result = cursor.fetchone()
if result[0]:
start_date = (datetime.strptime(result[0], "%Y-%m-%d") + timedelta(days=1)).strftime("%Y%m%d")
daily_data = pro.daily(ts_code=ts_code, start_date=start_date)
# 插入数据至MySQL数据库
for index, row in daily_data.iterrows():
trade_date = datetime.strptime(row["trade_date"], "%Y-%m-%d").strftime("%Y-%m-%d")
open_price = row["open"]
high_price = row["high"]
low_price = row["low"]
close_price = row["close"]
pre_close_price = row["pre_close"]
change_price = row["change"]
pct_chg = row["pct_chg"]
vol = row["vol"]
amount = row["amount"]
insert_sql = f"INSERT INTO daily (ts_code, trade_date, open, high, low, close, pre_close, change, pct_chg, vol, amount) VALUES ('{ts_code}', '{trade_date}', {open_price}, {high_price}, {low_price}, {close_price}, {pre_close_price}, {change_price}, {pct_chg}, {vol}, {amount});"
cursor.execute(insert_sql)
conn.commit()
# 关闭MySQL连接
cursor.close()
conn.close()
```
以上代码会将股票历史k线数据保存至名为`daily`的数据表中,数据表结构如下:
| 列名 | 数据类型 | 描述 |
| --- | --- | --- |
| id | INT(11) | 自增编号 |
| ts_code | VARCHAR(10) | 股票代码 |
| trade_date | DATE | 交易日期 |
| open | FLOAT(10,2) | 开盘价 |
| high | FLOAT(10,2) | 最高价 |
| low | FLOAT(10,2) | 最低价 |
| close | FLOAT(10,2) | 收盘价 |
| pre_close | FLOAT(10,2) | 昨收价 |
| change | FLOAT(10,2) | 涨跌额 |
| pct_chg | FLOAT(10,2) | 涨跌幅 |
| vol | FLOAT(20,2) | 成交量(手) |
| amount | FLOAT(20,2) | 成交额(千元) |
每天下午18点更新当天或缺失的k线数据可以通过设置定时任务实现,例如在Linux系统中使用`crontab`命令:
```
0 18 * * * /usr/bin/python3 /path/to/python/script.py
```
以上命令会在每天下午18点自动执行Python脚本,更新当天或缺失的k线数据。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)