命令彙總:
json.dumps(obj) 將python資料轉化為json先貼個完整**:indent實現縮排,ensure_ascii 是否用ascii解析
json.loads(s) 將json資料轉換為python的資料
json.dump(obj, fp) 轉換為json並儲存到檔案中
json.load(fp) 從檔案中讀取json,並轉化為python資料
1 data =67執行結果:import json #
匯入模組
8 with open('
test.json
','w
') as file: #
test.json文字,只能寫入狀態 如果沒有就建立
9 json.dump(data, file) #
data轉換為json資料格式並寫入檔案
10 file.close() #
關閉檔案
1112 with open('
test.json
','r
') as filer: #
開啟文字讀取狀態
13 r = json.load(filer) #
解析讀到的文字內容 轉為python資料 以乙個變數接收
14 filer.close() #
關閉檔案
1516 fea = r['
feature
'] #
列印變數
17print(fea[2])
詳細步驟都寫了,注釋。
看起來簡潔方便,似乎毫無難點,那麼來愉快的談一下使用中常見的坑
不管你要讀什麼,反正我一點資料也沒有:
traceback (most recent call last):報錯如上,原因十分明顯,json沒有內容可解析,一般直接從檔案中進行排除,會發現讀取的文字是空白,也就是說在寫入資料的時候就已經發生了錯誤。但**並沒有報錯,如果沒有進行寫入檢測的話,差不多就卡這了,這個原因很簡單,大部分是因為在寫入時候呼叫的介面是dumps而不是dump,程式本身可以編譯通過,但實際上沒有文字寫入。導致讀取的時候直接報錯。如果遇到這個問題,去排查一下寫入資料時呼叫的介面。file
"/users/penglong/documents/python/s10/day3/test.py
", line 13, in
l =json.load(file)
file
"/library/frameworks/python.framework/versions/3.5/lib/python3.5/json/__init__.py
", line 268, in
load
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
file
"/library/frameworks/python.framework/versions/3.5/lib/python3.5/json/__init__.py
", line 319, in
loads
return
_default_decoder.decode(s)
file
"/library/frameworks/python.framework/versions/3.5/lib/python3.5/json/decoder.py
", line 339, in
decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
file
"/library/frameworks/python.framework/versions/3.5/lib/python3.5/json/decoder.py
", line 357, in
raw_decode
raise jsondecodeerror("
expecting value
", s, err.value) from
none
json.decoder.jsondecodeerror: expecting value: line 1 column 1 (char 0)
不管你要我寫什麼,反正我就是寫不進去:
file "報錯如上,此錯誤針對pickle寫入,原因也很明顯,寫入必須是字串,我猜json不報錯的原因很大程度是因為它長的比較像字串。。忽略這個不靠譜的想法。這個引發的錯誤留給下乙個。解決**如下:(ps:在2.7裡面敲是沒遇到這個毛病的,在3.5裡面一定要在"wb"狀態下才能正常寫入。)/users/penglong/documents/python/s10/day3/test.py
", line 17, in
pickle.dump(data,file)
typeerror: write() argument must be str,
not bytes
with open("以上,json的錯誤完全相反,可能報錯為typeerror: a bytes-like object is required, not 'str',完全不用舉例了,是踩進了pickle的坑里,直接把"wb"狀態改回"w"即可解決。然而總有那麼些時候並不在意強扭的瓜甜不甜,僅僅是想強行把它給扭下來。假如犯了強迫症,一定要在wb的狀態下使用,那麼,解決**如下:(ps:嚴重不推薦使用。。其實就是我半天不知道毛病在哪,頭痛醫頭腳痛醫腳,不管原因,強行把它給寫進去了,雖然執行和結果都沒錯,但肯定有什麼地方不對)pickle.pk
","wb
") as file: #
改引數"w"為"wb" 代表二進位制寫入
pickle.dump(data,file)
file.close()
with open("不管你要做什麼,反正我就是沒有函式存在:jsondata.json
","wb
") as file:
file.write((json.dumps(data).encode(
"utf-8
")))#
強制以utf-8轉一下byte資料再以普通形式寫入 。
file.close()
traceback (most recent call last):報錯如上,json沒有dumps模組存在。排查本地檔案,大部分原因是本地檔案有了json.py。python的包匯入直接先導入了同級目錄下的檔案。如果本地檔案並沒有重複,那麼就只能排查安裝檔案了,python命令列編輯模式下help(json.py) 如果檔案存在,可以看到其詳細資訊和存放位置。但安裝檔案丟失的情況,我並未遇到。踩到的坑是本地檔案重複,反而在安裝檔案排查了好久。file
"/users/penglong/documents/python/s10/day3/test.py
", line 10, in
json.dumps(data,file)
attributeerror: module
'json
' has no attribute '
dumps
'
物理讀,邏輯讀,預讀
在使用set statistics io on語句統計i o時候,我們會看到類似下面的結果 掃瞄計數 1,邏輯讀取 2 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。那麼它們代表什麼呢?預讀 用於估計資訊,去硬碟讀取資料到快取。物理讀 ...
髒讀,不可重複的讀,虛讀
引用 髒讀dirty reads 當事務讀取還未被提交的資料時,就會發生這種事件。舉例來說 transaction 1 修改了一行資料,然後 transaction 2 在 transaction 1 還未提交修改操作之前讀取了被修改的行。如果 transaction 1 回滾了修改操作,那麼 tr...
C 檔案讀(逐行讀 逐單詞讀)
include include include include include using namespace std int main ifile.clear ifile.seekg 0 檔案重定位 while ifile word coutvector iterator it text.begi...