Hi! 大家好,我是Eric,這次要來教大家如何以Python讀取各種不同格式的檔案。
緣起:現在檔案格式除了最基本常見的csv外,還有JSON與XML,那如何以Python來讀取呢?
方法:運用 [Python]的[pandas]、[csv]、[json]及[xml.etree.ElementTree] 套件。
使用資料:
參考來源:
CSV
讀取csv-第1種方式。
import pandas as pd # 載入pandas套件並命名為pd
speed = pd.read_csv("network_speed.csv") # 以read_csv函式讀取csv
speed.head(10) # 顯示檔案前10行
讀取csv-第2種方式。
import csv # 載入csv套件
# 開啟csv檔案,其中參數newline=""是為了讓資料的換行符號被正確載入,而參數encoding="utf-8"則是因為資料包含中文字元,為了讓中文字元能正確被載入
with open("network_speed.csv",newline="",encoding="utf-8")as file:
# 以csv.reader函式讀取資料,若資料的分隔字元非逗號(,),舉例像是冒號(:)則可增加參數delimiter = ":" 來讀取
rows = csv.reader(file)
# 以for迴圈將資料一行一行載入
for r in rows:
print(r)
讀取csv-第2種方式(讀取成Dictionary)。
import csv # 載入csv套件
# 開啟csv檔案,其中參數newline=""是為了讓資料的換行符號被正確載入,而參數encoding="utf-8"則是因為資料包含中文字元,為了讓中文字元能正確被載入
with open("network_speed.csv",newline="",encoding="utf-8")as file:
# 以csv.reader函式讀取資料,若資料的分隔字元非逗號(,),舉例像是冒號(:)則可增加參數delimiter = ":" 來讀取
rows = csv.DictReader(file)
# 以for迴圈將資料一行一行載入
for r in rows:
print(r["\ufeff縣市"],r["第一階段"],r["第二階段"],r["第一階段"],r["第二階段"])
JSON
讀取JSON。
讀取JSON前,我們先藉由JSON解析工具-POSTMAN來查看JSON檔案,我們的目標是result物件中的records陣列。
參考來源:
import json
from pprint import pprint # 載入pprint套件,會按照英文字母順序以可觀性較高的方式輸出
# 以"r"讀寫模式、編碼方式為utf-8的方式開啟檔案
with open("NewTaipei_ubike.json","r",encoding="utf-8")as file:
# 以json.load讀取文件,另json.loads為讀取行(參考來源:https://blog.csdn.net/xiongchengluo1129/article/details/78779418)
json_file = json.load(file)
# 以pprint輸出result物件的records陣列
pprint(json_file["result"]["records"])
import json
from pprint import pprint # 載入pprint套件,會按照英文字母順序以可觀性較高的方式輸出
# 以"r"讀寫模式、編碼方式為utf-8的方式開啟檔案
with open("NewTaipei_ubike.json","r",encoding="utf-8")as file:
# 以json.load讀取文件,另json.loads為讀取行(參考來源:https://blog.csdn.net/xiongchengluo1129/article/details/78779418)
json_file = json.load(file)
# 針對ar陣列(新北市YouBike站點位置)以迴圈輸出
for i in range(len(json_file["result"]["records"])):
print(json_file["result"]["records"][i]["ar"])
XML
讀取XML。
import xml.etree.ElementTree as XET
tree = XET.parse('post.xml') # 以XET套件載入XML檔案
root = tree.getroot() # 取得XML表格
# 以XML檔案的index及迴圈取得XML檔案中的3個欄位資料
for i in range(len(root)):
print(root[i][0].text, root[i][1].text, root[i][2].text)
Eric您好:
想請教若是想將桌面上的json檔案匯入python(in spyder),該怎麼做呢?目前遇到以下錯誤QQ
denny34973497您好,不好意思這麼晚才看到,經測試要以桌面路線匯入json檔案時,其中的「\」要變成「\」或「/」,這樣才不會出錯喔。
如我原本的案例:
with open("NewTaipei_ubike.json","r",encoding="utf-8")as file:
若以路徑則會變成:
with open("C:\Users\User\Desktop\NewTaipei_ubike.json","r",encoding="utf-8")as file:
我以上述測試是可執行的,提供您參考,謝謝
成功了!謝謝您的回覆~