如何使用Python将股票数据保存为CSV文件

0 投票
1 回答
666 浏览
提问于 2025-04-18 01:31

我正在尝试用Python保存我从一个API下载的股票数据。但是我不知道该怎么做。

数据的输出如下:

>>> 
{'20140311': {'1030': {'total_price': 9421626, 'end': 6.76, 'high': 6.85, 'start': 6.78, 'low': 6.67, 'volumn': 1396431}, '1130': {'total_price': 5042807, 'end': 6.86, 'high': 6.91, 'start': 6.76, 'low': 6.76, 'volumn': 735220}, '1400': {'total_price': 5410292, 'end': 6.79, 'high': 6.9, 'start': 6.88, 'low': 6.76, 'volumn': 792890}, '1500': {'total_price': 6470290, 'end': 6.83, 'high': 6.85, 'start': 6.79, 'low': 6.74, 'volumn': 954111}},....

我代码的最后几行是:

def main():
    g = getStock60MIN('000030', 'sz')
    print g

if __name__ == "__main__":
    main()

1 个回答

1

借鉴自 如何将Python字典写入CSV文件?

你有一个嵌套的字典结构。也许下面的内容会对你有帮助:

import csv

my_dict = {
  '20140311': {
    '1030': {
      'total_price': 9421626, 'end': 6.76, 'high': 6.85, 'start': 6.78, 'low': 6.67, 'volumn': 1396431
    },
    '1130': {
      'total_price': 5042807, 'end': 6.86, 'high': 6.91, 'start': 6.76, 'low': 6.76, 'volumn': 735220
    },
    '1400': {
      'total_price': 5410292, 'end': 6.79, 'high': 6.9, 'start': 6.88, 'low': 6.76, 'volumn': 792890
    }, 
    '1500': {
      'total_price': 6470290, 'end': 6.83, 'high': 6.85, 'start': 6.79, 'low': 6.74, 'volumn': 954111
    }
  }
}

def initialize_keys():
  for dict1 in my_dict.itervalues():
    for dict2 in dict1.itervalues():
      return dict2.keys()

with open('mycsvfile.csv', 'wb') as f:
  w = csv.DictWriter(f, initialize_keys())
  w.writeheader()
  for dict1 in my_dict.itervalues():
    for dict2 in dict1.itervalues():
      w.writerow(dict2)

不过我不太清楚你想怎么处理第二个字典的键(也就是 1030113014001500),我的方法是忽略它们。

这是 mycsvfile.csv 的内容:

total_price,end,high,start,low,volumn
9421626,6.76,6.85,6.78,6.67,1396431
5042807,6.86,6.91,6.76,6.76,735220
5410292,6.79,6.9,6.88,6.76,792890
6470290,6.83,6.85,6.79,6.74,954111

可以看看Python中的 csv 模块。它可能会给你更多的灵感。


根据提问者的评论更新:

因为第一个字典的键是日期,第二个字典的键是时间,所以可以创建一个 datetime.datetime 实例,然后将其写入CSV文件:

import csv
import datetime

my_dict = {
  '20140311': {
    '1030': {
      'total_price': 9421626, 'end': 6.76, 'high': 6.85, 'start': 6.78, 'low': 6.67, 'volumn': 1396431
    },
    '1130': {
      'total_price': 5042807, 'end': 6.86, 'high': 6.91, 'start': 6.76, 'low': 6.76, 'volumn': 735220
    },
    '1400': {
      'total_price': 5410292, 'end': 6.79, 'high': 6.9, 'start': 6.88, 'low': 6.76, 'volumn': 792890
    }, 
    '1500': {
      'total_price': 6470290, 'end': 6.83, 'high': 6.85, 'start': 6.79, 'low': 6.74, 'volumn': 954111
    }
  }
}

def initialize_keys():
  for dict1 in my_dict.itervalues():
    for dict2 in dict1.itervalues():
      return dict2.keys()

with open('mycsvfile.csv', 'wb') as f:
  w = csv.DictWriter(f, ['datetime'] + initialize_keys())
  w.writeheader()
  for datestr, dict1 in my_dict.iteritems():
    for timestr, dict2 in dict1.iteritems():
      whole_row = {}
      whole_row['datetime'] = datetime.datetime\
                .strptime(datestr + timestr, '%Y%m%d%H%M')\
                .strftime('%Y/%m/%d %H:%M')
      whole_row.update(dict2)
      w.writerow(whole_row)

这会产生以下输出:

datetime,total_price,end,high,start,low,volumn
2014/03/11 10:30,9421626,6.76,6.85,6.78,6.67,1396431
2014/03/11 11:30,5042807,6.86,6.91,6.76,6.76,735220
2014/03/11 14:00,5410292,6.79,6.9,6.88,6.76,792890
2014/03/11 15:00,6470290,6.83,6.85,6.79,6.74,954111

撰写回答