Python實現(xiàn)提取JSON文件中指定數(shù)據(jù)并保存至CSV或Excel內(nèi)
本文介紹基于Python語言,讀取JSON格式的數(shù)據(jù),提取其中的指定內(nèi)容,并將提取到的數(shù)據(jù)保存到 .csv
格式或 .xlsx
格式的表格文件中的方法。
JSON格式的數(shù)據(jù)在數(shù)據(jù)信息交換過程中經(jīng)常使用,但是相對而言并不直觀;因此,有時我們希望將JSON格式的數(shù)據(jù)轉(zhuǎn)換為Excel表格文件數(shù)據(jù);這里就介紹一下基于Python語言,將JSON數(shù)據(jù)轉(zhuǎn)換為 .csv
格式與 .xlsx
格式數(shù)據(jù)的方法。
首先,來看一下我們的需求。我們現(xiàn)在基于Postman軟件,獲得了某一個網(wǎng)站中,以JSON格式記錄的大量數(shù)據(jù),其中部分數(shù)據(jù)如下圖所示(這里是大量數(shù)據(jù)樣本中的 1
條樣本)。這里關(guān)于Postman獲取網(wǎng)站數(shù)據(jù)的方法,大家如果有需要,可以參考文章Postman軟件基本用法:瀏覽器復制請求信息并導入到軟件從而測試、發(fā)送請求
我們現(xiàn)在希望實現(xiàn)的是,將上述JSON數(shù)據(jù)中的文字部分(也就是有價值的信息部分)提取出來,并保存在一個Excel表格文件中;其中,不同的列就是不同的信息屬性,不同的行就是不同的樣本。
明確了需求,我們就可以開始撰寫代碼。這里需要注意,在本文代碼中需要用到Python的 json
庫,關(guān)于這一個庫的配置,大家可以參考文章Mac系統(tǒng)Anaconda環(huán)境配置Python的json庫。
首先,介紹將JSON格式數(shù)據(jù)轉(zhuǎn)換為 .csv
文件數(shù)據(jù)的代碼,具體如下。
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Tue Aug 29 10:22:23 2023 @author: fkxxgis """ import json import csv with open('/Users/didi/Documents/response.json', 'r') as f: data = json.load(f) with open('/Users/didi/Documents/Data_All.csv', 'w', newline='', encoding='utf-8') as csvfile: csvwriter = csv.writer(csvfile) header = ["xkzh", "qymc", "gmpZsh", "cym", "shren", "shrq"] csvwriter.writerow(header) for row in data['rows']: xkzh = row['xkzh'] qymc = row['qymc'] gmpZsh = row['gmpZsh'] cym = row['cym'] shren = row['shren'] shrq = row['shrq'] csvwriter.writerow([xkzh, qymc, gmpZsh, cym, shren, shrq])
首先需要說明,上述代碼在執(zhí)行后,我打開新建的 .csv
格式文件,會出現(xiàn)中文字符亂碼的情況,如下圖所示。
但是用本文接下來的導出為 .xlsx
格式文件的代碼就不會有這個問題,所以我當時沒有進一步研究亂碼出現(xiàn)的原因,就直接用了后續(xù)的代碼了。如果大家感興趣,可以對上述代碼加以進一步研究。
上述代碼的具體含義如下。首先,我們通過 with open('/Users/didi/Documents/response.json', 'r') as f:
,打開名為 response.json
的文件(也就是存儲了我們JSON格式數(shù)據(jù)的文件),并將其賦值給變量 f
;這里的 'r'
表示以只讀模式打開文件。隨后,代碼 data = json.load(f)
使用 json.load()
函數(shù)加載JSON文件中的數(shù)據(jù),并將其存儲在變量 data
中。
接下來,打開名為 Data_All.csv
的文件,并將其賦值給變量 csvfile
。 'w'
表示以寫入模式打開文件。 newline=''
和 encoding='utf-8'
用于設置寫入 .csv
文件時的換行和編碼方式。隨后, csvwriter = csv.writer(csvfile)
表示創(chuàng)建一個 .csv
寫入器,將數(shù)據(jù)寫入 csvfile
文件。
其次,我們即可定義 .csv
文件的表頭(列名),以列表形式存儲在 header
變量中;隨后,通過 csvwriter.writerow(header)
將表頭寫入 .csv
文件。
緊接著,對于 data
中的每一行數(shù)據(jù),執(zhí)行以下操作—— xkzh = row['xkzh']
就表示從當前行的字典中提取鍵為 xkzh
的值,并將其賦值給變量 xkzh
;接下來的其他幾行也是這個意思。最后,我們將提取的數(shù)據(jù)以列表的形式寫入 .csv
文件的一行。
接下來,我們介紹將JSON格式數(shù)據(jù)轉(zhuǎn)換為 .xlsx
文件數(shù)據(jù)的代碼,具體如下。
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Tue Aug 29 10:42:26 2023 @author: fkxxgis """ import json from openpyxl import Workbook with open('/Users/didi/Documents/Veterinary/response_2.json', 'r') as f: data = json.load(f) wb = Workbook() ws = wb.active header = ["qymc", "tym", "gg", "spm", "pzwh", "zxbz", "pzrq", "yxq", "sxyy", "bgqk"] ws.append(header) for row in data['rows']: qymc = row['qymc'] tym = row['tym'] gg = row['gg'] spm = row['spm'] pzwh = row['pzwh'] zxbz = row['zxbz'] pzrq = row['pzrq'] yxq = row['yxq'] sxyy = row['sxyy'] bgqk = row['bgqk'] ws.append([qymc, tym, gg, spm, pzwh, zxbz, pzrq, yxq, sxyy, bgqk]) wb.save('/Users/didi/Documents/Veterinary/Result_2.xlsx')
上述代碼的含義也比較簡單。
首先,我們打開名為 response_2.json
的文件,并將其賦值給變量 f
。 'r'
表示以只讀模式打開文件。隨后的 data = json.load(f)
表示使用 json.load()
函數(shù)加載JSON文件中的數(shù)據(jù),并將其存儲在變量 data
中。
接下來,創(chuàng)建一個新的Excel工作簿,將其賦值給變量 wb
;隨后,獲取工作簿的活動工作表,并將其賦值給變量 ws
。
緊接著,我們定義Excel文件的表頭(列名),以列表形式存儲在 header
變量中,并將表頭寫入Excel文件的第一行。隨后,對于 data
中的每一行數(shù)據(jù)(假設每一行都是一個字典),執(zhí)行以下操作——從當前行的字典中提取特定字段的值,并將它們分別賦值給對應的變量。接下來,我們將提取的數(shù)據(jù)以列表的形式寫入Excel文件的一行。
最后,即可將Excel工作簿保存為名為 Result_2.xlsx
的文件。
運行上述代碼,我們即可在 Result_2.xlsx
文件中看到提取到的數(shù)據(jù),其中每一行就是一個樣本,每一列表示一種屬性,且沒有出現(xiàn)亂碼的情況。如下圖所示。
至此,大功告成。
歡迎關(guān)注:瘋狂學習GIS
到此這篇關(guān)于Python實現(xiàn)提取JSON文件中指定數(shù)據(jù)并保存至CSV或Excel內(nèi)的文章就介紹到這了,更多相關(guān)Python提取JSON數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python腳本請求數(shù)量達到上限,http請求重試問題
這篇文章主要介紹了python腳本請求數(shù)量達到上限,http請求重試問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06Python實現(xiàn)數(shù)據(jù)庫表的監(jiān)控警告的項目實踐
本文主要介紹了使用Python 實現(xiàn)對數(shù)據(jù)庫表的監(jiān)控告警功能, 并將告警信息通過釘釘機器人發(fā)送到釘釘群,具有一定的參考價值,感興趣的可以了解一下2024-05-05python實現(xiàn)讀取大文件并逐行寫入另外一個文件
下面小編就為大家分享一篇python實現(xiàn)讀取大文件并逐行寫入另外一個文件,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04pytorch transform數(shù)據(jù)處理轉(zhuǎn)c++問題
這篇文章主要介紹了pytorch transform數(shù)據(jù)處理轉(zhuǎn)c++問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02Python中數(shù)組,列表:冒號的靈活用法介紹(np數(shù)組,列表倒序)
下面小編就為大家分享一篇Python中數(shù)組,列表:冒號的靈活用法介紹(np數(shù)組,列表倒序),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04matplotlib設置顏色、標記、線條,讓你的圖像更加豐富(推薦)
這篇文章主要介紹了matplotlib設置顏色、標記、線條,讓你的圖像更加豐富,本文通過實例圖文相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09