Python實(shí)現(xiàn)提取JSON文件中指定數(shù)據(jù)并保存至CSV或Excel內(nèi)
本文介紹基于Python語(yǔ)言,讀取JSON格式的數(shù)據(jù),提取其中的指定內(nèi)容,并將提取到的數(shù)據(jù)保存到 .csv 格式或 .xlsx 格式的表格文件中的方法。
JSON格式的數(shù)據(jù)在數(shù)據(jù)信息交換過(guò)程中經(jīng)常使用,但是相對(duì)而言并不直觀;因此,有時(shí)我們希望將JSON格式的數(shù)據(jù)轉(zhuǎn)換為Excel表格文件數(shù)據(jù);這里就介紹一下基于Python語(yǔ)言,將JSON數(shù)據(jù)轉(zhuǎn)換為 .csv 格式與 .xlsx 格式數(shù)據(jù)的方法。
首先,來(lái)看一下我們的需求。我們現(xiàn)在基于Postman軟件,獲得了某一個(gè)網(wǎng)站中,以JSON格式記錄的大量數(shù)據(jù),其中部分?jǐn)?shù)據(jù)如下圖所示(這里是大量數(shù)據(jù)樣本中的 1 條樣本)。這里關(guān)于Postman獲取網(wǎng)站數(shù)據(jù)的方法,大家如果有需要,可以參考文章Postman軟件基本用法:瀏覽器復(fù)制請(qǐng)求信息并導(dǎo)入到軟件從而測(cè)試、發(fā)送請(qǐng)求

我們現(xiàn)在希望實(shí)現(xiàn)的是,將上述JSON數(shù)據(jù)中的文字部分(也就是有價(jià)值的信息部分)提取出來(lái),并保存在一個(gè)Excel表格文件中;其中,不同的列就是不同的信息屬性,不同的行就是不同的樣本。
明確了需求,我們就可以開(kāi)始撰寫(xiě)代碼。這里需要注意,在本文代碼中需要用到Python的 json 庫(kù),關(guān)于這一個(gè)庫(kù)的配置,大家可以參考文章Mac系統(tǒng)Anaconda環(huán)境配置Python的json庫(kù)。
首先,介紹將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])首先需要說(shuō)明,上述代碼在執(zhí)行后,我打開(kāi)新建的 .csv 格式文件,會(huì)出現(xiàn)中文字符亂碼的情況,如下圖所示。

但是用本文接下來(lái)的導(dǎo)出為 .xlsx 格式文件的代碼就不會(huì)有這個(gè)問(wèn)題,所以我當(dāng)時(shí)沒(méi)有進(jìn)一步研究亂碼出現(xiàn)的原因,就直接用了后續(xù)的代碼了。如果大家感興趣,可以對(duì)上述代碼加以進(jìn)一步研究。
上述代碼的具體含義如下。首先,我們通過(guò) with open('/Users/didi/Documents/response.json', 'r') as f: ,打開(kāi)名為 response.json 的文件(也就是存儲(chǔ)了我們JSON格式數(shù)據(jù)的文件),并將其賦值給變量 f ;這里的 'r' 表示以只讀模式打開(kāi)文件。隨后,代碼 data = json.load(f) 使用 json.load() 函數(shù)加載JSON文件中的數(shù)據(jù),并將其存儲(chǔ)在變量 data 中。
接下來(lái),打開(kāi)名為 Data_All.csv 的文件,并將其賦值給變量 csvfile 。 'w' 表示以寫(xiě)入模式打開(kāi)文件。 newline='' 和 encoding='utf-8' 用于設(shè)置寫(xiě)入 .csv 文件時(shí)的換行和編碼方式。隨后, csvwriter = csv.writer(csvfile) 表示創(chuàng)建一個(gè) .csv 寫(xiě)入器,將數(shù)據(jù)寫(xiě)入 csvfile 文件。
其次,我們即可定義 .csv 文件的表頭(列名),以列表形式存儲(chǔ)在 header 變量中;隨后,通過(guò) csvwriter.writerow(header) 將表頭寫(xiě)入 .csv 文件。
緊接著,對(duì)于 data 中的每一行數(shù)據(jù),執(zhí)行以下操作—— xkzh = row['xkzh'] 就表示從當(dāng)前行的字典中提取鍵為 xkzh 的值,并將其賦值給變量 xkzh ;接下來(lái)的其他幾行也是這個(gè)意思。最后,我們將提取的數(shù)據(jù)以列表的形式寫(xiě)入 .csv 文件的一行。
接下來(lái),我們介紹將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')上述代碼的含義也比較簡(jiǎn)單。
首先,我們打開(kāi)名為 response_2.json 的文件,并將其賦值給變量 f 。 'r' 表示以只讀模式打開(kāi)文件。隨后的 data = json.load(f) 表示使用 json.load() 函數(shù)加載JSON文件中的數(shù)據(jù),并將其存儲(chǔ)在變量 data 中。
接下來(lái),創(chuàng)建一個(gè)新的Excel工作簿,將其賦值給變量 wb ;隨后,獲取工作簿的活動(dòng)工作表,并將其賦值給變量 ws 。
緊接著,我們定義Excel文件的表頭(列名),以列表形式存儲(chǔ)在 header 變量中,并將表頭寫(xiě)入Excel文件的第一行。隨后,對(duì)于 data 中的每一行數(shù)據(jù)(假設(shè)每一行都是一個(gè)字典),執(zhí)行以下操作——從當(dāng)前行的字典中提取特定字段的值,并將它們分別賦值給對(duì)應(yīng)的變量。接下來(lái),我們將提取的數(shù)據(jù)以列表的形式寫(xiě)入Excel文件的一行。
最后,即可將Excel工作簿保存為名為 Result_2.xlsx 的文件。
運(yùn)行上述代碼,我們即可在 Result_2.xlsx 文件中看到提取到的數(shù)據(jù),其中每一行就是一個(gè)樣本,每一列表示一種屬性,且沒(méi)有出現(xiàn)亂碼的情況。如下圖所示。

至此,大功告成。
歡迎關(guān)注:瘋狂學(xué)習(xí)GIS
到此這篇關(guān)于Python實(shí)現(xiàn)提取JSON文件中指定數(shù)據(jù)并保存至CSV或Excel內(nèi)的文章就介紹到這了,更多相關(guān)Python提取JSON數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python 刪除excel表格重復(fù)行,數(shù)據(jù)預(yù)處理操作
- Python實(shí)現(xiàn)將MySQL數(shù)據(jù)庫(kù)查詢結(jié)果導(dǎo)出到Excel
- python使用openpyxl庫(kù)讀取Excel文件數(shù)據(jù)
- python中將數(shù)據(jù)生成為Excel文件的5種方法舉例
- 如何在Python中導(dǎo)入EXCEL數(shù)據(jù)
- 如何利用Python讓Excel快速按條件篩選數(shù)據(jù)
- 詳解Python如何實(shí)現(xiàn)對(duì)比兩個(gè)Excel數(shù)據(jù)差異
- Python按條件刪除Excel表格數(shù)據(jù)的方法(示例詳解)
相關(guān)文章
Python使用QQ郵箱發(fā)送郵件報(bào)錯(cuò)smtplib.SMTPAuthenticationError
這篇文章主要介紹了Python使用QQ郵箱發(fā)送郵件報(bào)錯(cuò)smtplib.SMTPAuthenticationError,簡(jiǎn)單介紹了python 發(fā)送郵件的步驟,需要的朋友可以參考下2019-12-12
Python實(shí)現(xiàn)UDP程序通信過(guò)程圖解
這篇文章主要介紹了Python實(shí)現(xiàn)UDP程序通信過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
Python?cachetools實(shí)現(xiàn)緩存過(guò)期策略
cachetools?是一個(gè)功能強(qiáng)大的?Python?庫(kù),用于實(shí)現(xiàn)多種緩存策略,幫助開(kāi)發(fā)者優(yōu)化程序性能,下面小編就來(lái)和大家詳細(xì)講講cachetools的原理與應(yīng)用吧2025-06-06
Python中如何控制小數(shù)點(diǎn)精度與對(duì)齊方式
在 Python 編程中,數(shù)據(jù)輸出格式化是一個(gè)常見(jiàn)的需求,尤其是在涉及到小數(shù)點(diǎn)精度和對(duì)齊方式時(shí),下面小編就來(lái)為大家介紹一下如何在 Python 中實(shí)現(xiàn)這些功能吧2025-03-03
Python程序設(shè)計(jì)入門(mén)(2)變量類型簡(jiǎn)介
這篇文章主要介紹了Python變量類型,需要的朋友可以參考下2014-06-06

