Python進階【四】:XML和JSON文件處理

Python提供了多種處理XML和JSON文件的方式,讓我們來看看最常用的方法。

一、處理JSON文件

JSON在Python中處理起來非常簡單,因為它的結構與Python的字典(dict)和列表(list)幾乎一致。

常用模塊:json模塊

優點:Python標準庫自帶,無需安裝,使用簡單

使用方法示例

1. 讀取JSON文件(反序列化)
import json# 從文件讀取
with open('data.json', 'r', encoding='utf-8') as f:data = json.load(f)  # 返回Python字典或列表# 從字符串讀取
json_str = '{"name": "張三", "age": 25, "hobbies": ["籃球", "讀書"]}'
data = json.loads(json_str)  # 注意是loads(load string)print(data['name'])  # 輸出: 張三
2. 寫入JSON文件(序列化)
import jsondata = {"name": "李四","age": 30,"married": False,"children": None
}# 寫入文件
with open('output.json', 'w', encoding='utf-8') as f:json.dump(data, f, ensure_ascii=False, indent=4)  # indent使輸出更美觀# 轉換為JSON字符串
json_str = json.dumps(data, ensure_ascii=False)
print(json_str)  # 輸出: {"name": "李四", "age": 30, ...}

參數說明

  • ensure_ascii=False:允許非ASCII字符(如中文)直接顯示,而不是轉成Unicode
  • indent=4:縮進4個空格,使JSON更易讀

二、處理XML文件

XML處理稍微復雜一些,Python提供了幾種不同的解析方式。

常用模塊:

  1. xml.etree.ElementTree(簡稱ET) - 最常用
  2. lxml - 第三方庫,功能更強大
  3. xml.dom - DOM方式解析
  4. xml.sax - SAX方式解析

我們重點介紹最常用的ElementTreelxml

1. 使用xml.etree.ElementTree(內置模塊)

讀取XML文件
import xml.etree.ElementTree as ET# 從文件解析
tree = ET.parse('data.xml')  # 解析XML文件
root = tree.getroot()  # 獲取根元素# 從字符串解析
xml_str = '''
<person><name>王五</name><age>28</age><interests><interest>游泳</interest><interest>編程</interest></interests>
</person>
'''
root = ET.fromstring(xml_str)  # 從字符串解析# 遍歷XML
print(root.tag)  # 輸出: person
for child in root:print(child.tag, child.text)  # 輸出: name 王五, age 28...# 查找特定元素
for interest in root.findall('.//interest'):  # 查找所有interest元素print(interest.text)  # 輸出: 游泳 編程
創建和寫入XML文件
import xml.etree.ElementTree as ET# 創建XML結構
person = ET.Element("person")
name = ET.SubElement(person, "name")
name.text = "趙六"
age = ET.SubElement(person, "age")
age.text = "35"# 添加帶屬性的元素
address = ET.SubElement(person, "address", type="home")
address.text = "北京市海淀區"# 生成XML樹并寫入文件
tree = ET.ElementTree(person)
tree.write('output.xml', encoding='utf-8', xml_declaration=True)

2. 使用lxml(第三方庫,需安裝:pip install lxml

lxml提供了更強大的XPath支持和更好的性能。

from lxml import etree# 解析XML
tree = etree.parse('data.xml')
root = tree.getroot()# 使用XPath查找
names = root.xpath('//name/text()')  # 獲取所有name元素的文本
print(names)  # 輸出: ['王五']# 創建XML
root = etree.Element("school")
class1 = etree.SubElement(root, "class", id="1")
etree.SubElement(class1, "student").text = "小明"
etree.SubElement(class1, "student").text = "小紅"# 輸出
print(etree.tostring(root, pretty_print=True, encoding='unicode'))

三、JSON vs XML處理對比

操作JSON處理方式XML處理方式
讀取json.load()/json.loads()ET.parse()/ET.fromstring()
寫入json.dump()/json.dumps()ET.ElementTree().write()
數據結構字典/列表樹狀結構(元素、屬性、文本)
查詢數據直接字典訪問data['key']find()/findall()/XPath
創建數據直接構造字典/列表創建ElementSubElement

四、如何選擇?

  • 優先使用JSON:當數據主要用于程序間交換,特別是Web API時
  • 使用XML:當需要處理復雜文檔結構、需要注釋或處理已有XML系統時

記住:對于大多數現代應用,JSON通常是更簡單、更高效的選擇。XML則在某些特定領域(如文檔處理、傳統企業系統)仍有其優勢。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/85371.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/85371.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/85371.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Golang | 搜索哨兵-對接分布式gRPC服務

哨兵&#xff08;centennial&#xff09;負責接待客人&#xff0c;直接與調用方對接。哨兵的核心組件包括service HUB和connection pool。service HUB用于與服務中心通信&#xff0c;獲取可提供服務的節點信息。connection pool用于緩存與index worker的連接&#xff0c;避免每…

CSS3實現的賬號密碼輸入框提示效果

以下是通過CSS3實現輸入框提示效果的常用方法&#xff0c;包含浮動標簽和動態提示兩種經典實現方案&#xff1a; 一、浮動標簽效果 <div class"input-group"><input type"text" required><label>用戶名</label> </div><…

maven編譯時跳過test過程

如果代碼里有無法在打包環境中測試的部分&#xff0c;則直接運行mvn clean package&#xff0c;因為測試失敗&#xff0c;會導致打包失敗。目前有兩種方式可以跳過測試&#xff1a; 1. mvn clean package -DskipTests&#xff0c;這會跳過執行階須&#xff0c;但仍會生成測試所…

美業+智能體,解鎖行業轉化新密碼(2/6)

摘要&#xff1a;中國美業市場近年蓬勃發展&#xff0c;規模持續擴大&#xff0c;預計不久將突破萬億級別&#xff0c;但同時也面臨著諸多挑戰&#xff0c;如獲客成本攀升、服務質量不穩定、難以滿足消費者多元化個性化需求等。智能體技術的出現為美業帶來了新的發展機遇&#…

設計模式——責任鏈設計模式(行為型)

摘要 責任鏈設計模式是一種行為型設計模式&#xff0c;旨在將請求的發送者與接收者解耦&#xff0c;通過多個處理器對象按鏈式結構依次處理請求&#xff0c;直到某個處理器處理為止。它包含抽象處理者、具體處理者和客戶端等核心角色。該模式適用于多個對象可能處理請求的場景…

react/vue移動端項目,刷新頁面404的原因以及解決辦法

一 、 項目 移動端 二、背景 1、問題描述&#xff1a;react/vue移動端項目&#xff0c;正常的頁面操作跳轉&#xff0c;不會出現404的問題&#xff0c;但是一旦刷新&#xff0c;就會出現404報錯 2、產生原因&#xff1a; React Router是客戶端的路由&#xff0c;當再次刷新時…

數據結構-算法學習C++(入門)

目錄 03二進制和位運算04 選擇、冒泡、插入排序05 對數器06 二分搜索07 時間復雜度和空間復雜度08 算法和數據結構09 單雙鏈表09.1單雙鏈表及反轉09.2合并鏈表09.2兩數相加09.2分隔鏈表 013隊列、棧、環形隊列013.1隊列013.2棧013.3循環隊列 014棧-隊列的相互轉換014.1用棧實現…

用JS實現植物大戰僵尸(前端作業)

1. 先搭架子 整體效果&#xff1a; 點擊開始后進入主場景 左側是植物卡片 右上角是游戲的開始和暫停鍵 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevic…

深入理解設計模式之代理模式

深入理解設計模式之&#xff1a;代理模式 一、什么是代理模式&#xff1f; 代理模式&#xff08;Proxy Pattern&#xff09;是一種結構型設計模式。它為其他對象提供一種代理以控制對這個對象的訪問。代理對象在客戶端和目標對象之間起到中介作用&#xff0c;可以在不改變目標…

Ubuntu設置之初始化

安裝SSH服務 # 安裝 OpenSSH Server sudo apt update sudo apt install -y openssh-server# 檢查 SSH 服務狀態 sudo systemctl status ssh # Active: active (running) since Sat 2025-05-31 17:13:07 CST; 6s ago# 重啟服務 sudo systemctl restart ssh自定義分辨率 新…

【仿生機器人】極具前瞻性的架構——認知-情感-記憶“三位一體的仿生機器人系統架構

基于您的深度需求分析&#xff0c;我將為您設計一個全新的"認知-情感-記憶"三位一體的仿生機器人系統架構。以下是經過深度優化的解決方案&#xff1a; 一、核心架構升級&#xff08;三體認知架構&#xff09; 采用量子糾纏式架構設計&#xff1a; 認知三角&#xf…

Python量化交易12——Tushare全面獲取各種經濟金融數據

兩年前寫過Tushare的簡單使用&#xff1a; Python量化交易08——利用Tushare獲取日K數據_skshare- 現在更新一下吧&#xff0c;這兩年用過不少的金融數據庫&#xff0c;akshare&#xff0c;baostock&#xff0c;雅虎的&#xff0c;pd自帶的......發現還是Tushare最穩定最好用&…

python打卡day39@浙大疏錦行

知識點回顧 圖像數據的格式&#xff1a;灰度和彩色數據模型的定義顯存占用的4種地方 模型參數梯度參數優化器參數數據批量所占顯存神經元輸出中間狀態 batchisize和訓練的關系 1. 圖像數據格式 - 灰度圖像 &#xff1a;單通道&#xff0c;像素值范圍通常0-255&#xff0c;形狀為…

源碼解析(二):nnUNet

原文 &#x1f600; nnU-Net 是一個用于生物醫學圖像分割的自配置深度學習框架&#xff0c;可自動適應不同的數據集。可用于處理和訓練可能規模龐大的二維和三維醫學圖像。該系統分析數據集屬性并配置優化的基于 U-Net 的分割流程&#xff0c;無需手動參數調整或深度學習專業知…

clickhouse如何查看操作記錄,從日志來查看寫入是否成功

背景 插入表數據后&#xff0c;因為原本表中就有數據&#xff0c;一時間沒想到怎么查看插入是否成功&#xff0c;因為對數據源沒有很多的了解&#xff0c;這時候就想怎么查看下插入是否成功呢&#xff0c;于是就有了以下方法 具體方法 根據操作類型查找&#xff0c;比如inse…

udp 傳輸實時性測量

UDP&#xff08;用戶數據報協議&#xff09;是一種無連接的傳輸協議&#xff0c;適用于實時性要求較高的應用&#xff0c;如視頻流、音頻傳輸和游戲等。測量UDP傳輸的實時性可以通過多種工具和方法實現&#xff0c;以下是一些常見的方法和工具&#xff1a; 1. 使用 iperf 測試…

pikachu通關教程- over permission

如果使用A用戶的權限去操作B用戶的數據&#xff0c;A的權限小于B的權限&#xff0c;如果能夠成功操作&#xff0c;則稱之為越權操作。 越權漏洞形成的原因是后臺使用了 不合理的權限校驗規則導致的。 水平越權 當我們以Lucy賬號登錄&#xff0c;查詢個人信息時&#xff0c;會有…

nc 命令示例

nc -zv 實用示例 示例 1&#xff1a;測試單個 TCP 端口&#xff08;最常見&#xff09; 目標&#xff1a; 檢查主機 webserver.example.com 上的 80 端口 (HTTP) 是否開放。 nc -zv webserver.example.com 80成功輸出&#xff1a; Connection to webserver.example.com (19…

Redis是什么

注&#xff1a;本人不懂Redis是什么&#xff0c;問的大模型&#xff0c;讓它用生動淺顯的語言向我解釋。為了防止忘記&#xff0c;我把它說的記錄下來。接下來的解釋都是大模型生成的&#xff0c;如果有錯誤的地方歡迎指正 。 Redis 是什么&#xff1f;&#xff08;一句話解釋&…

CVE-2021-28164源碼分析與漏洞復現

漏洞概述 漏洞名稱&#xff1a;Jetty 路徑解析邏輯漏洞導致 WEB-INF 敏感信息泄露 漏洞編號&#xff1a;CVE-2021-28164 CVSS 評分&#xff1a;7.5 影響版本&#xff1a;Jetty 9.4.37 - 9.4.38 修復版本&#xff1a;Jetty ≥ 9.4.39 漏洞類型&#xff1a;路徑遍歷/信息泄露 C…