我的Python心路历程 第十期 (10.2 通达信股票day数据转化为csv)

背景

今日我的Python心路历程是 通达信股票day数据转化为csv)

方案

股票day数据转化为csv,便于pandas分析。详见参考1来下载股票日线数据,如:上证所有证券日线。
在这里插入图片描述
其中,需要了解的是通达信日线*.day文件内容:
文件名即股票代码
每32个字节为一天数据
每4个字节为一个字段,
每个字段内低字节在前00 ~ 03 字节:年月日,
整型04 ~ 07 字节:开盘价100,
整型08 ~ 11 字节:最高价
100,
整型12 ~ 15 字节:最低价100,
整型16 ~ 19 字节:收盘价
100,
整型20 ~ 23 字节:成交额(元),
float型24 ~ 27 字节:成交量(股),
整型28 ~ 31 字节:(保留)

起初用struct.unpack方法解析数据编译报错如下:
在这里插入图片描述
查询源码介绍:
在这里插入图片描述
在这里插入图片描述
如上所示4字节没啥大问题,实在搞不定了,根据经验估计是struct类对unpack方法做了封装引起的,直接用unpack问题得到解决。

不啰嗦,不含糊。上编译通过的所有代码:

#!/usr/bin/python
# coding=UTF-8

import os
import sys
from struct import unpack
import datetime

#将通达信股票day数据转化为csv,便于pandas分析;以上证所有证券日线数据为例。
def day2csv(fileName, code):

    #获取绝对路径,data为当前文件夹
    curpath = os.path.join(os.path.dirname(__file__), 'data')
    file_object_path = curpath + '/' + code + '.csv'
    file_object = open(file_object_path, 'w+')

    #初始化csv文件:Date	Open	High	Low	Close	Acount	Volume	Adj Close
    listname = 'Date' + "," + 'Open' + "," + 'High' + "," + 'Low' + "," + 'Close' + "," + 'Acount' + "," + 'Volume' + "," + 'Adj Close' + '\r\n'
    file_object.writelines(listname)

    #初始化变量
    i = 0

    with open(fileName, 'rb') as f:
        #有数据就继续处理
        while True:
            #每次读一条记录,相当于32字节,减小对buf的开销
            buf = f.read(32)

            # 没有数据了就结束while循环
            if not buf:
                break

            num = len(buf)
            no = num / 32
            b = 0
            e = 32
            #items = list()

            #解析buf
            a = unpack('IIIIIfII', buf[b:e])
            year = int(a[0] / 10000);
            m = int((a[0] % 10000) / 100);
            month = str(m);
            if m < 10:
                month = "0" + month;
            d = (a[0] % 10000) % 100;
            day = str(d);
            if d < 10:
                day = "0" + str(d);
            dd = str(year) + "-" + month + "-" + day
            openPrice = a[1] / 100.0
            high = a[2] / 100.0
            low = a[3] / 100.0
            close = a[4] / 100.0
            amount = a[5] / 10.0
            vol = a[6]
            unused = a[7]
            if i == 0:
                preClose = close

            i += 1

            ratio = round((close - preClose) / preClose * 100, 2)
            preClose = close

            #暂时用preClose代替,具体如何获取待确认后更新
            adjClose = preClose

            #整理当前这条记录:Date	Open	High	Low	Close	Acount	Volume	Adj Close
            item = [dd, str(openPrice), str(high), str(low), str(close), str(amount), str(vol), str(adjClose)]
            list = item[0] + "," + item[1] + "," + item[2] + "," + item[3] + "," + item[4] + "," + \
                   item[5] + "," + item[6] + "," + item[7] + "\r\n"

            #每条记录逐个写入csv
            file_object.writelines(list)

        #print list
        print "总共解析%d条记录。"%i

    file_object.close()
    f.close()

def main():
    # 获取绝对路径,data为当前文件夹
    curpath = os.path.join(os.path.dirname(__file__), 'shlday')
    filepath = curpath + '/' +'sh000001.day'

    #执行转化操作,'00001'为csv文件名;如果需要批量操作的话就遍历文件夹下面的所有day文件即可实现
    day2csv(filepath, '00001')

if __name__ == "__main__":
    main()

效果

通过excel打开csv文件查看效果如下图所示:
在这里插入图片描述
需要说明的一点是,此处的adjClose并非取自通信达日线数据,是通过= preClose赋值。从通信达如何获取该值暂时没有答案,不过有辛通过雅虎金融数据中获得了该值,具体可详细参见参考5。

基于数据分析后的展示效果如参考4所述,如下:
在这里插入图片描述

哦耶,妥妥的捋顺了一层皮。

备注:
1、股票数据下载日线数据途径之一Python读取通达信本地数据
2、[python]解析通达信盘后数据获取历史日线数据
3、我的Python心路历程 第十期 (10.1 实践实例之股票数据分析)
4、股票数据下载日线数据途径之二如何下载股票历史数据?
5、我的Python心路历程 第十期 (10.3 雅虎金融股票day数据转化为csv)

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 通达信是一款常用的股票分析软件,其保存的日线数据文件格式为day文件。而csv文件是一种常见的数据文件格式,可以在不同的软件和工具之间交换和共享数据。 将通达信day文件转换为csv文件可以通过以下步骤完成: 1. 打开通达信软件,并选择要转换的股票或指数的日线数据。 2. 在通达信软件中找到“导出”或“另存为”等选项,选择将数据导出为文本文件。 3. 在弹出的保存对话框中,选择保存为txt格式,以便后续处理。 4. 使用文本编辑器(如记事本、Sublime Text等)打开保存的txt文件。 5. 检查txt文件的格式,通达信day文件通常包含日期、开盘价、最高价、最低价、收盘价等信息,每个数据之间用制表符或空格分隔。 6. 检查并调整txt文件的编码,确保其与要求的csv文件编码一致(如UTF-8)。 7. 在文本编辑器中选择“另存为”选项,并将文件格式选择为csv格式。 8. 保存文件,并选择适当的文件名和存储位置。 转换完成后,您就可以使用支持csv文件格式的软件(如Microsoft Excel、Python pandas库等)进行进一步的数据分析、可视化或处理。 需要注意的是,转换过程中可能需要根据具体的数据格式和软件要求进行一些调整和处理,例如处理日期格式、缺失值等。此外,如需处理多只股票或指数的数据,需要对每一个day文件进行转换。 ### 回答2: 通达信day文件是一种历史股票数据文件格式,包含了股票的高、低、开、收、成交量等信息。而CSV文件是一种以逗号分隔值的文本文件,用于储存简单的表格数据。如果想将通达信day文件转换为CSV文件,可以按照以下步骤操作。 首先,需要打开通达信软件,并选择要导出的历史数据通达信软件提供了数据导出的功能,可以通过菜单或快捷键找到导出选项。 接下来,选择导出文件的路径和名称。通常可以选择将导出的CSV文件保存在本地计算机的某个文件夹中。 然后,在导出选项中选择CSV文件作为导出的文件格式。通常可以在导出选项中看到支持的文件格式,选择CSV文件即可。 最后,点击导出按钮,等待一段时间,通达信软件将会自动将day文件转换为CSV文件,并保存在之前选择的路径中。 转换完成后,可以在保存的路径中找到生成的CSV文件。可以使用文本编辑器或者电子表格软件打开CSV文件,查看其中的股票历史数据,包括日期、开盘价、收盘价、最高价、最低价等。 需要注意的是,不同版本的通达信软件可能略有差异,具体的操作步骤可能会有所不同。如果对于软件操作不熟悉,可以参考软件的帮助文档或者寻求专业人士的帮助。 ### 回答3: 通达信day文件是一种常见的股票数据文件格式,而CSV文件是一种常用的数据存储格式。将通达信day文件转换为CSV文件可以方便地对股票数据进行处理和分析。 通达信day文件通常以“day”为后缀名,包含股票的每日交易数据,如开盘价、收盘价、最高价、最低价、成交量等。而CSV文件以逗号分隔不同的数值,并且可以直接在电子表格软件中打开和编辑。 要进行转换,首先需要打开通达信软件,选择相应的股票数据文件。然后在数据菜单中选择“导出数据”选项,并选择CSV格式。接下来,在弹出的导出设置窗口中,可以选择需要导出的数据类型、导出起止日期等,并点击“确认”按钮。 此时,通达信软件会自动生成相应的CSV文件,保存在指定的路径下。打开生成的CSV文件,可以使用电子表格软件(如Excel)打开和编辑,方便进行数据处理和分析。在CSV文件中,每一行代表一条股票交易数据,各个数据字段以逗号分隔。 总结而言,将通达信day文件转换为CSV文件,可以通过通达信软件进行操作,选择导出数据的格式为CSV,然后软件会自动生成对应的CSV文件,方便进行后续的数据处理和分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值