iT邦幫忙

2

[Python]資料讀取R01─CSV、JSON、XML

Hi! 大家好,我是Eric,這次要來教大家如何以Python讀取各種不同格式的檔案

/images/emoticon/emoticon37.gif




CSV


讀取csv-第1種方式。

import pandas as pd    # 載入pandas套件並命名為pd
speed = pd.read_csv("network_speed.csv")   # 以read_csv函式讀取csv
speed.head(10)  # 顯示檔案前10行

https://ithelp.ithome.com.tw/upload/images/20190527/201157740vXJJMRZCL.png

讀取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)

https://ithelp.ithome.com.tw/upload/images/20190527/20115774UmsJ0M7mKm.png

讀取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["第二階段"])

https://ithelp.ithome.com.tw/upload/images/20190527/20115774Zut7x9nr6F.png


JSON


讀取JSON。

讀取JSON前,我們先藉由JSON解析工具-POSTMAN來查看JSON檔案,我們的目標是result物件中的records陣列。

參考來源:

https://ithelp.ithome.com.tw/upload/images/20190527/20115774Ez8mOu1PJm.png
https://ithelp.ithome.com.tw/upload/images/20190527/20115774zETI6b9rYE.png

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"])

https://ithelp.ithome.com.tw/upload/images/20190527/20115774c5yXlCuELu.png

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"])

https://ithelp.ithome.com.tw/upload/images/20190527/20115774YCsktENk03.png


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)

https://ithelp.ithome.com.tw/upload/images/20190527/20115774Omiv29YFjW.png


1 則留言

0
denny34973497
iT邦新手 5 級 ‧ 2019-08-19 10:52:24

Eric您好:
想請教若是想將桌面上的json檔案匯入python(in spyder),該怎麼做呢?目前遇到以下錯誤QQ
https://ithelp.ithome.com.tw/upload/images/20190819/20116986Bxzp8SSw7S.png

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:

我以上述測試是可執行的,提供您參考,謝謝

成功了!謝謝您的回覆~

我要留言

立即登入留言