python 通达信上传云端_Python读取通达信本地数据
一、介绍
python获取股票数据的方法很多,其中 Tushare 财经数据接口包很好用,当然,也可以通过通达信本地的数据获取,这样更为方便。
日线数据存在这路径下 D:\通达信\vipdoc\sh\lday(我的通达信安装目录是D盘)
接着我们需要的就是解析这些数据,在分别存为 csv 格式的数据就行了,这样我们可以方便的用 pandas 或其他方法读取和分析。
通达信的日线数据格式如下:
每32个字节为一天数据
每4个字节为一个字段,每个字段内低字节在前
00 ~ 03 字节:年月日, 整型
04 ~ 07 字节:开盘价*100, 整型
08 ~ 11 字节:最高价*100, 整型
12 ~ 15 字节:最低价*100, 整型
16 ~ 19 字节:收盘价*100, 整型
20 ~ 23 字节:成交额(元),float型
24 ~ 27 字节:成交量(股),整型
28 ~ 31 字节:(保留)
打开一个 .day 的文件,发现是乱码,以二进制格式存储,那么我们只需按照上面存的字节数解析下就可以了。
先读取一天的数据
>>> f = open('D:/通达信/vipdoc/sh/lday/sh000001.day', 'rb')
>>> f.read(32)
b'\xa2\xde2\x01\x14\x9b\x03\x00\x0f\x9d\x03\x00\x8d\x91\x03\x00\xef\x93\x03\x00\xcb\xbc\x14Q\x9a\xfb|\x02-\x01Z\x02'
这应该就是一天的数据了,我们对这个数据进行解析,这里需要用到 struct 模块中的 unpack 方法
>>> import struct
>>> f = open('D:/通达信/vipdoc/sh/lday/sh000001.day', 'rb')
>>> li = f.read(32)
>>> data = struct.unpack('lllllfll', li)
>>> data
(20111010, 236308, 236815, 233869, 234479, 39926411264.0, 41745306, 39452973)
# 分别为日期,开盘,最高,最低,收盘,成交额,成交量,保留值
unpack用法: 前一个参数是格式,'lllllfii' 就是一个浮点数格式(f,这里对应日线数据中的成交额是float格式)和其他整形格式(i,这里对应日线数据中的其他数据是 int 格式)
那么剩下的问题不大了
二、完整代码
在 sh 目录下新建了个 pythondata 文件夹,注意文件路径分隔符是 /
import struct
import datetime
def stock_csv(filepath, name):
data = []
with open(filepath, 'rb') as f:
file_object_path = 'D:/通达信/vipdoc/sh/pythondata/' + name +'.csv'
file_object = open(file_object_path, 'w+')
while True:
stock_date = f.read(4)
stock_open = f.read(4)
stock_high = f.read(4)
stock_low= f.read(4)
stock_close = f.read(4)
stock_amount = f.read(4)
stock_vol = f.read(4)
stock_reservation = f.read(4)
# date,open,high,low,close,amount,vol,reservation
if not stock_date:
break
stock_date = struct.unpack("l", stock_date) # 4字节 如20091229
stock_open = struct.unpack("l", stock_open) #开盘价*100
stock_high = struct.unpack("l", stock_high) #最高价*100
stock_low= struct.unpack("l", stock_low) #最低价*100
stock_close = struct.unpack("l", stock_close) #收盘价*100
stock_amount = struct.unpack("f", stock_amount) #成交额
stock_vol = struct.unpack("l", stock_vol) #成交量
stock_reservation = struct.unpack("l", stock_reservation) #保留值
date_format = datetime.datetime.strptime(str(stock_date[0]),'%Y%M%d') #格式化日期
list= date_format.strftime('%Y-%M-%d')+","+str(stock_open[0]/100)+","+str(stock_high[0]/100.0)+","+str(stock_low[0]/100.0)+","+str(stock_close[0]/100.0)+","+str(stock_vol[0])+"\r\n"
file_object.writelines(list)
file_object.close()
stock_csv('D:/通达信/vipdoc/sh/lday/sh000001.day', '1')
运行下,打开 1.CSV 文件
OK
三、批量解析
import os
import struct
import datetime
def stock_csv(filepath, name):
data = []
with open(filepath, 'rb') as f:
file_object_path = 'D:/通达信/vipdoc/sh/pythondata/' + name +'.csv'
file_object = open(file_object_path, 'w+')
while True:
stock_date = f.read(4)
stock_open = f.read(4)
stock_high = f.read(4)
stock_low= f.read(4)
stock_close = f.read(4)
stock_amount = f.read(4)
stock_vol = f.read(4)
stock_reservation = f.read(4)
# date,open,high,low,close,amount,vol,reservation
if not stock_date:
break
stock_date = struct.unpack("l", stock_date) # 4字节 如20091229
stock_open = struct.unpack("l", stock_open) #开盘价*100
stock_high = struct.unpack("l", stock_high) #最高价*100
stock_low= struct.unpack("l", stock_low) #最低价*100
stock_close = struct.unpack("l", stock_close) #收盘价*100
stock_amount = struct.unpack("f", stock_amount) #成交额
stock_vol = struct.unpack("l", stock_vol) #成交量
stock_reservation = struct.unpack("l", stock_reservation) #保留值
date_format = datetime.datetime.strptime(str(stock_date[0]),'%Y%M%d') #格式化日期
list= date_format.strftime('%Y-%M-%d')+","+str(stock_open[0]/100)+","+str(stock_high[0]/100.0)+","+str(stock_low[0]/100.0)+","+str(stock_close[0]/100.0)+","+str(stock_vol[0])+"\r\n"
file_object.writelines(list)
file_object.close()
path = 'D:/通达信/vipdoc/sh/lday/'
listfile = os.listdir('D:/通达信/vipdoc/sh/lday/')
for i in listfile:
stock_csv(path+i, i[:-4])
运行下
完美
python 通达信上传云端_Python读取通达信本地数据相关推荐
- python 通达信上传云端_python模拟登录通达信
以下实例是一个完整的代码,实现了从博客获取内容发布至百度,分别实践抓取博客内容.模拟登录.表单提交这几步: #注意,以下程序是一个完全程序,如果只需要实现模拟登录,提交表单,删除抓取部分即可,相关的代 ...
- python 通达信上传云端_云端同步的问题-通达信知识 -程序化交易(CXH99.COM)
咨询内容: 通达信电脑版功能比较完善,有问题用户提出来也很快改进,但手机版实在是太不好用了,希望能尽快改进一下,就说一下简单的数据同步功能. 首先,现在数据同步只能上传自选股和自定义板块,用户其他的自 ...
- python模拟浏览器上传文件_Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)...
http协议本身的原始方法不支持multipart/form-data请求,这个请求由原始方法演变而来的. multipart/form-data的基础方法是post,也就是说是由post方法来组合实 ...
- python调用接口上传文件_python上传文件接口
文件的参数组装: ('文件名',"open打开的文件(rb模式打开)",'文件的类型说明') 关于不同的请求参数类型,使用requests的处理: 1.文件上传(Content-T ...
- python实现文件上传功能_python实现上传下载文件功能
最近刚学python,遇到上传下载文件功能需求,记录下! django web项目,前端上传控件用的是uploadify. 文件上传 - 后台view 的 Python代码如下: @csrf_exem ...
- python 抓包 上传 文件_Python接口测试文件上传实例解析
接口测试中,上传文件的测试场景非常常见.例如:上传头像(图片).上传文件.上传视频等.下面以一个上传图片的例子为大家讲解如何通过 python 测试上传文件接口. 首先通过抓包分析上传文件接口的请求参 ...
- python调用接口上传文件_python接口自动化7-post文件上传
前言 文件上传在我们软件是不可少的,最多的使用是体现在我们后台,当然我们前台也会有.但是了解过怎样上传文件吗?这篇我们以禅道文档-创建文档,上传文件为例. post请求中的:Content-Type: ...
- python实现文件上传功能_python实现文件上传功能
如文件小可以采用这个方式import osdef form(): return """\ enctype="multipart/form-data" ...
- python怎么编程上传资料_Python实现文件上传
原博文 2019-09-03 20:38 − server端: import socket import os sk = socket.socket() address = ('127.0.0.1', ...
最新文章
- Android切近实战(八)
- discuz 二次开发文章
- Leetcode 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 (每日一题 20210917)
- VS和matlab混合编程的推荐书籍!
- swift3.0 Runtime 增加属性
- 解决EditText在ListView Item中,第一次点击无法获取焦点问题
- 【数字信号处理】基于DFT的滤波系列3之插值滤波(含MATLAB代码)
- 最大子数组 ——算法导论
- Android学习笔记进阶20之得到图片的缩略图
- Codeforces Edu Round 64 (Rated for Div. 2)
- flashtorch:卷积神经网络的可视化
- 小爱mini改aux立体声_拆解报告:Redmi小爱音箱Play
- java 防止反射_解决反射型XSS漏洞攻击
- TripAdvisor猫途鹰翻译志愿者线上任务评测
- 潮流计算计算机算法研究现状,电力系统潮流计算研究现状
- java游戏猿人时代_猿人时代_JAVA游戏免费版下载_7723手机游戏[www.7723.cn]
- [游戏程序] 经典游戏服务器端架构概述
- 抽象代数 04.03 Sylow 子群
- Kotlin读写Excel文件
- 二维快速傅里叶逆变换
热门文章
- pandas 检查某个元素是否在index中
- rocketmq怎么保证数据不会重复_阿里架构师亲授:Kafka和RocketMQ的消息复制实现的差异点在哪?...
- 查看服务器是有有默认共享文件,服务器共享文件远程查看
- Deep Learning基础--Softmax求导过程
- HDU 4099 Revenge of Fibonacci (数学+字典数)
- hdu-1862-EXCEL排序
- silverlight-Canvas中1像素的线变成了2像素
- VBS脚本压缩IIS日志
- android视频录制无图像,Android开发拍摄视频在图库不显示问题
- c语言输入n打印数字菱形,打印数字菱形,急啊,帮帮小女子啊。。。