1. 程式人生 > >python讀取json格式檔案和用pandas讀取excel檔案

python讀取json格式檔案和用pandas讀取excel檔案

IT Xiao Ang Zai 9月30號

版本:python3.7

程式設計軟體:sublime

一:python解析json資料

1.什麼是json:

(1)JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式。它基於ECMAScript的一個子集。 JSON採用完全獨立於語言的文字格式,但是也使用了類似於C語言家族的習慣(包括C、C++、Java、JavaScript、Perl、Python等)。這些特性使JSON成為理想的資料交換語言。易於人閱讀和編寫,同時也易於機器解析和生成(一般用於提升網路傳輸速率)。

JSON在python中分別由list和dict組成。

(2)作用:主要用於字串和python資料型別間進行轉換。

(3)Json模組提供了四個功能:dumps、dump、loads、load

json dumps把資料型別轉換成字串 dump把資料型別轉換成字串並存儲在檔案中  loads把字串轉換成資料型別  load把檔案開啟從字串轉換成資料型別。

(4)優點:是可以在不同語言之間交換資料的。

    缺點:json只能序列化最基本的資料型別。

2.python對json資料的基本操作:

   python的json模組提供了一種簡單的方式來編碼和解碼JSON資料。其中兩個主要的函式是json.dumps()和json.loads()。json.dumps()函式是將一個python資料結構轉換為JSON編碼的字串,json.loads()函式是將一個JSON編碼的字串轉換回一個python資料結構。但如果你要處理的是檔案,你可以使用 json.dump() 和 json.load() 來編碼和解碼JSON資料:

import json

data = {'name':'IT Xiao Ang Zai','number':100,'age':19.5}
jsonStr = json.dumps(data)  #python資料結構(一般為字典)轉換為JSON編碼的字串
print(jsonStr)
print(type(json))
data2 = json.loads(jsonStr) #將一個JSON編碼的字串轉換回一個python資料結構
print(data2)
print(type(data2))
#我們現在試著寫入json型別資料
with open("my_data.json",'w') as f:
	json.dump(data2,f)

#我們現在進行讀入json型別資料
with open("my_data.json",'r') as g:
	result_data = json.load(g)
print(result_data)

結果如下:

我們發現,當轉換為一個json字串的時候,它的型別為module,其實是一個字串。而且我們要對檔案進行操作的話,需要用到不加s的兩個函式進行編碼和解碼json資料的操作。

其實只要把返回的json格式巢狀弄清楚,json還是比較簡單的,其實之前網路爬蟲中就介紹過json解析資料了。

3.注意事項

在讀取檔案時,要設定以utf-8解碼模式讀取檔案,encoding引數必須設定,否則預設以gbk模式讀取檔案,當檔案中包含中文時,會報錯:

會出現錯誤:UnicodeDecodeError: 'gbk' codec can't decode byte 0xaa in position 32: illegal multibyte sequence

此時需要設定encoding引數,以utf-8編碼模式讀取檔案:

import json

with open("E:\\result.json","r",encoding="utf-8") as f:
	data = json.load(f)
print(data)

我們可以看到結果:

現在就讀取正常了。

二:pandas模組讀取excel檔案

1.pandx簡介:pandas是基於NumPy的為了解決資料分析任務而建立的工具。pandas模組提供了高效地操作大型資料集所需的工具,對於大批量的資料分析是很方便的。

2.讀取excel檔案

(1) 讀取檔案通過read_excel函式實現,除了pandas還需要安裝第三方庫xlrd。

read_excel(io, sheetname=0, header=0, skiprows=None, skip_footer=0, index_col=None, names=None, parse_cols=None, parse_dates=False, date_parser=None, na_values=None, thousands=None, convert_float=True, has_index_names=None, converters=None, dtype=None, true_values=None, false_values=None, engine=None, squeeze=False, **kwds)

(2) 主要引數

io:excel檔案,可以是檔案路徑、檔案網址、file-like物件、xlrd workbook

sheetname:返回指定的sheet,引數可以是字串(sheet名)、整型(sheet索引)、list(元素為字串和整型,返回字典{'key':'sheet'})、none(返回字典,全部sheet)

header:指定資料表的表頭,引數可以是int、list of ints,即為索引行數為表頭; names:返回指定name的列,引數為array-like物件。

encoding:關鍵字引數,指定以何種編碼讀取

注:該函式返回pandas中的DataFrame或dict of DataFrame物件,利用DataFrame的相關操作即可讀取相應的資料。

3.寫入檔案

(1) 寫入檔案通過pandas構造DataFrame,呼叫to_excel方法實現。

DataFrame.to_excel(excel_writer, sheet_name='Sheet1', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep='inf', verbose=True, freeze_panes=None)

(2) 主要引數

excel_writer:寫入的目標excel檔案,可以是檔案路徑、ExcelWriter物件

sheet_name:被寫入的sheet名稱,string型別,預設為'sheet1'; na_rep:缺失值表示,string型別

header:是否寫表頭資訊,布林或list of string型別,預設為True

index:是否寫行號,布林型別,預設為True

encoding:指定寫入編碼,string型別

在下一篇文章中會向大家介紹一些實際操作,請大家及時關注,歡迎評論與交流。