一、介绍

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读取通达信本地数据相关推荐

  1. python 通达信上传云端_python模拟登录通达信

    以下实例是一个完整的代码,实现了从博客获取内容发布至百度,分别实践抓取博客内容.模拟登录.表单提交这几步: #注意,以下程序是一个完全程序,如果只需要实现模拟登录,提交表单,删除抓取部分即可,相关的代 ...

  2. python 通达信上传云端_云端同步的问题-通达信知识 -程序化交易(CXH99.COM)

    咨询内容: 通达信电脑版功能比较完善,有问题用户提出来也很快改进,但手机版实在是太不好用了,希望能尽快改进一下,就说一下简单的数据同步功能. 首先,现在数据同步只能上传自选股和自定义板块,用户其他的自 ...

  3. python模拟浏览器上传文件_Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)...

    http协议本身的原始方法不支持multipart/form-data请求,这个请求由原始方法演变而来的. multipart/form-data的基础方法是post,也就是说是由post方法来组合实 ...

  4. python调用接口上传文件_python上传文件接口

    文件的参数组装: ('文件名',"open打开的文件(rb模式打开)",'文件的类型说明') 关于不同的请求参数类型,使用requests的处理: 1.文件上传(Content-T ...

  5. python实现文件上传功能_python实现上传下载文件功能

    最近刚学python,遇到上传下载文件功能需求,记录下! django web项目,前端上传控件用的是uploadify. 文件上传 - 后台view 的 Python代码如下: @csrf_exem ...

  6. python 抓包 上传 文件_Python接口测试文件上传实例解析

    接口测试中,上传文件的测试场景非常常见.例如:上传头像(图片).上传文件.上传视频等.下面以一个上传图片的例子为大家讲解如何通过 python 测试上传文件接口. 首先通过抓包分析上传文件接口的请求参 ...

  7. python调用接口上传文件_python接口自动化7-post文件上传

    前言 文件上传在我们软件是不可少的,最多的使用是体现在我们后台,当然我们前台也会有.但是了解过怎样上传文件吗?这篇我们以禅道文档-创建文档,上传文件为例. post请求中的:Content-Type: ...

  8. python实现文件上传功能_python实现文件上传功能

    如文件小可以采用这个方式import osdef form(): return """\ enctype="multipart/form-data" ...

  9. python怎么编程上传资料_Python实现文件上传

    原博文 2019-09-03 20:38 − server端: import socket import os sk = socket.socket() address = ('127.0.0.1', ...

最新文章

  1. Android切近实战(八)
  2. discuz 二次开发文章
  3. Leetcode 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 (每日一题 20210917)
  4. VS和matlab混合编程的推荐书籍!
  5. swift3.0 Runtime 增加属性
  6. 解决EditText在ListView Item中,第一次点击无法获取焦点问题
  7. 【数字信号处理】基于DFT的滤波系列3之插值滤波(含MATLAB代码)
  8. 最大子数组 ——算法导论
  9. Android学习笔记进阶20之得到图片的缩略图
  10. Codeforces Edu Round 64 (Rated for Div. 2)
  11. flashtorch:卷积神经网络的可视化
  12. 小爱mini改aux立体声_拆解报告:Redmi小爱音箱Play
  13. java 防止反射_解决反射型XSS漏洞攻击
  14. TripAdvisor猫途鹰翻译志愿者线上任务评测
  15. 潮流计算计算机算法研究现状,电力系统潮流计算研究现状
  16. java游戏猿人时代_猿人时代_JAVA游戏免费版下载_7723手机游戏[www.7723.cn]
  17. [游戏程序] 经典游戏服务器端架构概述
  18. 抽象代数 04.03 Sylow 子群
  19. Kotlin读写Excel文件
  20. 二维快速傅里叶逆变换

热门文章

  1. pandas 检查某个元素是否在index中
  2. rocketmq怎么保证数据不会重复_阿里架构师亲授:Kafka和RocketMQ的消息复制实现的差异点在哪?...
  3. 查看服务器是有有默认共享文件,服务器共享文件远程查看
  4. Deep Learning基础--Softmax求导过程
  5. HDU 4099 Revenge of Fibonacci (数学+字典数)
  6. hdu-1862-EXCEL排序
  7. silverlight-Canvas中1像素的线变成了2像素
  8. VBS脚本压缩IIS日志
  9. android视频录制无图像,Android开发拍摄视频在图库不显示问题
  10. c语言输入n打印数字菱形,打印数字菱形,急啊,帮帮小女子啊。。。