最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python讀取JSON文件及一些常見的陷阱和改進(jìn)方法

 更新時(shí)間:2024年10月30日 09:58:44   作者:XuanRanDev  
在Python編程中處理JSON文件是一項(xiàng)基本但關(guān)鍵的技能,文章通過一個(gè)簡單的讀取JSON文件的代碼示例出發(fā),分析了代碼中存在的問題,將遇到的問題解決方法介紹也非常詳細(xì),需要的朋友可以參考下

前言

在 Python 編程中,JSON(JavaScript Object Notation)是一種常用的輕量級數(shù)據(jù)交換格式。我們經(jīng)常需要從本地文件中讀取 JSON 數(shù)據(jù)并進(jìn)行處理。本文將以一個(gè)簡單的讀取 JSON 文件的代碼示例為起點(diǎn),逐步進(jìn)行優(yōu)化,同時(shí)深入探討一些常見的陷阱和改進(jìn)方法。

1. 初始代碼:簡單的 JSON 文件讀取

以下是最基礎(chǔ)的讀取本地 JSON 文件的代碼示例:

import json

global data;

if __name__ == '__main__':
    with open('account.json', 'r', encoding='utf-8') as file:
        data = json.load(file)

    print(data)

這段代碼能夠正常讀取本地名為 account.json 的 JSON 文件,并將其內(nèi)容打印出來。然而,代碼中有一些可以優(yōu)化的地方,尤其是在變量作用域和代碼可擴(kuò)展性方面。

2. 分析與優(yōu)化方向

  • global 的使用:代碼中的 global 關(guān)鍵字用來聲明全局變量,通常用于在函數(shù)內(nèi)部修改全局變量的值。但在此代碼中,data 變量是在主作用域中定義并使用的,global 其實(shí)是多余的。去掉 global 不會影響代碼的正常運(yùn)行,并且使代碼更簡潔。

  • 異常處理:當(dāng)前的代碼假設(shè)文件始終存在且格式正確,但在真實(shí)環(huán)境中,可能會出現(xiàn)文件路徑錯(cuò)誤、文件不存在或 JSON 格式不正確的情況。如果不處理這些情況,程序會直接崩潰并拋出錯(cuò)誤。因此,引入異常處理機(jī)制是非常重要的改進(jìn)。

  • 函數(shù)封裝:為了使代碼具有更好的可維護(hù)性和復(fù)用性,建議將讀取 JSON 文件的邏輯封裝成一個(gè)函數(shù)。這樣不僅提高了代碼的清晰度,還便于以后調(diào)用。

3. 代碼優(yōu)化步驟

我們從去掉多余的 global 關(guān)鍵字開始,然后逐步進(jìn)行代碼優(yōu)化。

去掉 global 關(guān)鍵字

在 Python 中,global 通常用于函數(shù)內(nèi)部來修改全局變量。在當(dāng)前場景下,data 是在主函數(shù)中定義的,因此是全局變量,根本不需要顯式使用 global。去掉 global 后,代碼更清晰:

import json

if __name__ == '__main__':
    with open('account.json', 'r', encoding='utf-8') as file:
        data = json.load(file)

    print(data)

增加異常處理

為了讓代碼更加健壯,我們需要考慮以下幾個(gè)場景:

  • 文件不存在。
  • JSON 文件格式不正確。

可以通過 try-except 語句來捕獲這些異常,并在發(fā)生錯(cuò)誤時(shí)給出用戶友好的提示:

import json

if __name__ == '__main__':
    try:
        with open('account.json', 'r', encoding='utf-8') as file:
            data = json.load(file)
        print(data)
    except FileNotFoundError:
        print("文件未找到,請檢查文件路徑")
    except json.JSONDecodeError:
        print("文件格式錯(cuò)誤,請檢查是否為有效的 JSON 格式")

函數(shù)封裝

為了提高代碼的模塊化和可復(fù)用性,我們將文件讀取的邏輯封裝到一個(gè)函數(shù)中。這樣,當(dāng)你在其他地方需要讀取 JSON 文件時(shí),直接調(diào)用這個(gè)函數(shù)即可,避免代碼重復(fù):

import json

def load_json_file(file_path):
    """讀取 JSON 文件并返回解析后的數(shù)據(jù)"""
    try:
        with open(file_path, 'r', encoding='utf-8') as file:
            return json.load(file)
    except FileNotFoundError:
        print(f"文件 '{file_path}' 未找到")
    except json.JSONDecodeError:
        print(f"文件 '{file_path}' 格式錯(cuò)誤")
    return None

if __name__ == '__main__':
    data = load_json_file('account.json')
    
    if data:
        print(data)

4. 代碼解釋

  • 函數(shù) load_json_file():此函數(shù)接受一個(gè)文件路徑作為參數(shù),負(fù)責(zé)讀取并解析 JSON 文件。它不僅提高了代碼的可讀性和擴(kuò)展性,還便于錯(cuò)誤處理。

  • 異常處理:我們使用 FileNotFoundError 來處理文件不存在的情況,使用 json.JSONDecodeError 處理文件內(nèi)容格式不正確的情況。這些異常處理有助于提高代碼的健壯性,避免因文件問題導(dǎo)致的程序崩潰。

  • if data::在讀取文件時(shí),返回的 data 可能是 None(在文件讀取失敗的情況下)。因此,我們需要檢查數(shù)據(jù)是否成功讀取,只有成功時(shí)才輸出內(nèi)容。

5. 小結(jié)

通過一系列的優(yōu)化步驟,我們使得代碼從最初的簡單讀取 JSON 文件,變得更具容錯(cuò)性和擴(kuò)展性。這些改進(jìn)包括去掉不必要的 global 關(guān)鍵字、增加異常處理以及通過函數(shù)封裝提高代碼的可維護(hù)性。

最終優(yōu)化后的代碼更具通用性,可以處理各種潛在的異常,同時(shí)結(jié)構(gòu)更加清晰、簡潔。無論是初學(xué)者還是有經(jīng)驗(yàn)的開發(fā)者,都可以從這篇文章中學(xué)到如何編寫更健壯的 Python 代碼。

擴(kuò)展閱讀

到此這篇關(guān)于Python讀取JSON文件及一些常見的陷阱和改進(jìn)方法的文章就介紹到這了,更多相關(guān)Python讀取JSON文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PyCharm Community安裝與配置的詳細(xì)教程

    PyCharm Community安裝與配置的詳細(xì)教程

    這篇文章主要介紹了PyCharm Community安裝與配置的詳細(xì)教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 使用NumPy讀取MNIST數(shù)據(jù)的實(shí)現(xiàn)代碼示例

    使用NumPy讀取MNIST數(shù)據(jù)的實(shí)現(xiàn)代碼示例

    這篇文章主要介紹了使用NumPy讀取MNIST數(shù)據(jù)的實(shí)現(xiàn)代碼示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 利用python批量給云主機(jī)配置安全組的方法教程

    利用python批量給云主機(jī)配置安全組的方法教程

    這篇文章主要給大家介紹了利用python批量給云主機(jī)配置安全組的方法教程,文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。
    2017-06-06
  • 教你用Python寫一個(gè)植物大戰(zhàn)僵尸小游戲

    教你用Python寫一個(gè)植物大戰(zhàn)僵尸小游戲

    這篇文章主要介紹了教你用Python寫一個(gè)植物大戰(zhàn)僵尸小游戲,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • 使用Matplotlib將圖片保存為.tiff格式

    使用Matplotlib將圖片保存為.tiff格式

    這篇文章主要介紹了使用Matplotlib將圖片保存為.tiff格式問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • pandas DataFrame.to_sql()用法小結(jié)

    pandas DataFrame.to_sql()用法小結(jié)

    Pandas是基于NumPy的一種工具,該工具是為了解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的,本文主要介紹了pandas DataFrame.to_sql()用法小結(jié),感興趣的可以了解一下
    2024-02-02
  • Python實(shí)現(xiàn)url長短鏈接的轉(zhuǎn)換

    Python實(shí)現(xiàn)url長短鏈接的轉(zhuǎn)換

    短鏈接,通俗來說,就是將長的URL網(wǎng)址,通過程序計(jì)算等方式,轉(zhuǎn)換為簡短的網(wǎng)址字符串。本文將用Python語言實(shí)現(xiàn)這一效果,需要的可以參考一下
    2022-11-11
  • Python圖像處理之圖片文字識別功能(OCR)

    Python圖像處理之圖片文字識別功能(OCR)

    Tesseract 是一個(gè)OCR 庫,目前由Google 贊助(Google 也是一家以O(shè)CR 和機(jī)器學(xué)習(xí)技術(shù)聞名于世的公司)。這篇文章主要介紹了Python圖像處理之圖片文字識別功能 OCR的相關(guān)知識,需要的朋友可以參考下
    2019-07-07
  • Pandas自定義shift與DataFrame求差集的小技巧

    Pandas自定義shift與DataFrame求差集的小技巧

    Python是進(jìn)行數(shù)據(jù)分析的一種出色語言,主要是因?yàn)橐詳?shù)據(jù)為中心的python軟件包具有奇妙的生態(tài)系統(tǒng),下面這篇文章主要給大家介紹了關(guān)于Pandas自定義shift與DataFrame求差集的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • python動(dòng)畫manim中的顏色ManimColor的使用方法詳解

    python動(dòng)畫manim中的顏色ManimColor的使用方法詳解

    這篇文章主要介紹了python動(dòng)畫manim中的顏色ManimColor的使用方法,本文通過實(shí)例圖文展示給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-08-08

最新評論

白沙| 桐庐县| 咸丰县| 安仁县| 益阳市| 锦州市| 延安市| 普格县| 万载县| 阿城市| 理塘县| 赣榆县| 敖汉旗| 马关县| 鹿泉市| 阳新县| 上杭县| 萨迦县| 郓城县| 华坪县| 杭州市| 郸城县| 桦南县| 富宁县| 白银市| 甘肃省| 安国市| 沛县| 永修县| 梧州市| 阳朔县| 本溪市| 敦化市| 招远市| 新余市| 兴化市| 邢台市| 时尚| 吉林市| 河北省| 陇川县|