零基礎學Python--字典和JSON

在Python中,字典可能是應用最廣泛的類型之一。由於字典特殊的訪問方式,使得我們在讀取一些數據的時候,可以很方便的來使用字典對數據進行修改、插入、刪除和排序等各種操作。

而JSON是一種文本數據,可以很方便的轉爲可操作的字典格式。大家知道我們在讀取文件的時候,讀出來的默認都是字符串的形式,而Python的json包可以非常方便的幫助我們。

本文我仍然採用一個實際的例子來說明字典和Json文件格式。我們使用上一篇文章中使用的數據文本,假定我們有一個文本文件,其內容如下。我們需要將其讀取出來,然後處理爲字典的格式,並且最後將字典存爲一個json文件。

date,open,high,low,close

19991110,29.5,29.8,27.0,27.75

19991111,27.58,28.38,27.53,27.71

19991112,27.86,28.3,27.77,28.05

19991115,28.2,28.25,27.7,27.75

19991116,27.88,27.97,26.48,26.55

19991117,26.5,27.18,26.37,27.18

19991118,27.2,27.58,26.78,27.02

19991119,27.5,27.53,26.8,26.88

19991122,26.88,26.95,26.3,26.45

19991123,26.45,26.55,26.1,26.45

大家可以看到,爲了方便大家閱讀,我們對文件的內容進行了一些刪減,這樣更有利於我們進行操作。

之所以大家看到我使用的是股票的OHLCV數據,原因是因爲大家其實可以看到我前面有一個專題是專門講人工智能、深度學習和量化炒股的。其實這一部分也很簡單,只是輿論對人工智能和深度學習都有一些誤解。我舉一個簡單的例子,比如我讓大家用C語言來寫一個計算器程序,大家肯定覺得太困難了,尤其是UI的部分;但如果我讓大家用Python或者Java來寫,大家就覺得沒那麼困難了!爲什麼呢?我們有了很多封裝好的API可以用了,對吧。

深度學習和人工智能也是如此,我們不僅有Python這門膠水語言來幫助我們完成數據處理的部分,Tensorflow中我們還有更高級和更好用的Keras來進行模型的設計和訓練。所以其實一切並沒有大家想象的那麼需要數學和Matlab知識。

言歸正傳,我們先看看讀取這個文件後,我們如何來將其變爲一個字典的格式。我們先採用上篇文章的方法將文本讀入到一個列表。

file_path = 'ohlcv.txt'

stockList = []

stockDict = {}

with open(file_path) as f:

----stockList = f.readlines()

----stockList = [line.replace('', '').split(',') for line in stockList]

----stockList = list(zip(*stockList))

----print(stockList)

其運行結果我們將後面的值省略,只保留每一行的最前面的幾個元素。

[('date', '19991110', ......'),

('open', '29.5',......),

('high', '29.8',.....),

('low', '27.0', ......),

('close', '27.75', ......)]

然後我們將這個列表變成一個有5個Key值的字典。

----stockDict = {x[0]:x[1:] for x in stockList}

----print(stockDict)

我們可以看到運行結果爲:

{'date': ('19991110', '19991111',......),

'open': ('29.5', '27.58', ......),

'high': ('29.8', '28.38', ......),

'low': ('27.0', '27.53',......),

'close': ('27.75', '27.71',......')}

這個運行結果我們可以看到Key值是一個字符串,而Value是一個元組。如果我們希望Value是列表,也很容易。只需要對上面的程序稍作修改,如下。

----stockDict = {x[0]:list(x[1:]) for x in stockList}

----print(stockDict)

然後我們可以看到打印結果變爲:

{'date': ['19991110', '19991111', ......],

'open': ['29.5', '27.58', ......],

'high': ['29.8', '28.38', ......],

'low': ['27.0', '27.53',......],

'close': ['27.75', '27.71',......]}

這樣基本符合我們的預期了,我們可以很方便的獲得開盤、收盤等數據。那麼如果我們希望獲得1999年11月10日的所有數據,我們該怎麼處理呢?很簡單,我們可以用如下代碼。

idx = stockDict['date'].index('19991110')

date = stockDict['date'][idx]

o = stockDict['open'][idx]

h = stockDict['high'][idx]

l = stockDict['low'][idx]

c = stockDict['close'][idx]

print([date, o, h, l, c])

上面第一行我們可以根據列表的值來獲得索引號,然後我們可以通過索引號來獲取這個日期的其餘的OHLC的值。

接下來我們看看如何來使用json包,將這個文件存爲json文件格式,方便我們來讀寫。

with open('ohlc.json', 'w') as jf:

----json.dump(stockDict, jf, indent=4)

這裏我們創建一個文件,並且用json的方法來將其寫入到文件裏,indent表示縮進,我們來看看生成的文件的內容。照例我們省略一些內容,方便大家查看。

{

----"date": [

----"19991110",

----"19991111",

----....

----],

----"open": [

----"29.5",

----"27.58",

----......

----],

----"high": [

----"29.8",

----"28.38",

----......

----],

----"low": [

----"27.0",

----"27.53",

----......

----],

----"close": [

----"27.75",

----"27.71",

----......

----]

}

接下來我們再來看看我們如何從Json文件中讀取內容,這相對來說就更簡單了。

with open('ohlc.json') as jrf:

----content = json.load(jrf)

----print(content)

我們可以發現打印結果正是我們之前的字典的形式,毫無差別。也就是說我們其實用這種方法來將字典存儲爲json文件之後,我們可以非常方便的進行讀取和處理以及寫入,而不需要對數據進行額外的處理。藉助字典的操作的便利性,我們可以很方便的來操作數據。

當然,我們前面說了,如果使用Pandas這個數據包,會更加的方便。下面我們把本片文章的全部代碼貼到下面。

import json

file_path = 'ohlcv.txt'

stockList = []

stockDict = []

with open(file_path) as f:

----stockList = f.readlines()

----stockList = [line.replace('', '').split(',') for line in stockList]

----stockList = list(zip(*stockList))

----stockDict = {x[0]: list(x[1:]) for x in stockList}

----print(stockDict)

----idx = stockDict['date'].index('19991110')

----date = stockDict['date'][idx]

----o = stockDict['open'][idx]

----h = stockDict['high'][idx]

----l = stockDict['low'][idx]

----c = stockDict['close'][idx]

----print([date, o, h, l, c])

----with open('ohlc.json', 'w') as jf:

--------json.dump(stockDict, jf, indent=4)

----with open('ohlc.json') as jrf:

--------content = json.load(jrf)

--------print(content)

大家在拷貝代碼之後可以用編輯器的替換將“----”替換爲縮進,好了,字典和Json的結合用法,我們就介紹到這裏,大家如果有疑問可以提出。其實關於字典,還有很多的用法,我們沒有介紹,下一篇文章我會專門來講一下字典的一些小技巧。

人工智能與深度學習做量化請關注:AI量化(https://t.zsxq.com/RvfY37y) 星球限時免費,如需加入,請私信我獲得免費邀請碼!

零基礎學習Python與深度學習應用請關注星球:Python與深度學習 https://t.zsxq.com/bUFayZ3

微信公衆號:QTechAI

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章