2021年5月10日 星期一

【python抓爬仔】~~簡單抓取政府公開資料(新北市UBike即時資訊)來玩玩

 玩抓取資料可以很技術,也可以很生活啊!

現今愈來愈多的政府及機關公開資料可供民眾及系統設計應用,很多都是與民生相關的實用資訊!而且相關資料內容也益加完善,對於有設計及應用需求的人們真是個福音啊!

使用上也相當簡便,這次就以「新北市公共自行車租賃系統(YouBike)」的公開資料為操作範例,來練習玩玩如何簡便的獲取ubike的資時資訊並加以操作。

有關新北市的相關公開資料可以到以下位置查閱!

https://data.ntpc.gov.tw/


https://data.ntpc.gov.tw/openapi/swagger-ui/index.html?configUrl=%2Fopenapi%2Fswagger%2Fconfig&urls.primaryName=%E6%96%B0%E5%8C%97%E5%B8%82%E6%94%BF%E5%BA%9C%E4%BA%A4%E9%80%9A%E5%B1%80(28)


這次的操作練習主要目標是了解如何擷取網路上的公開資料回來加以整理、篩選出自己想要的資訊,並未多加著墨在其他的應用或呈現方式。

好囉~~一樣直接上程式碼吧.......

import requests

# 設定新北市UBike公開資料連結位置(取用json格式資料)
# 設定擷取資料筆數為700筆(目前新北市共有654個站點),若未設定size則每次預設只截取前30筆站點資料
url = 'https://data.ntpc.gov.tw/api/datasets/71Cxxxxx-A2DF-xxxxx-BEF1-xxxxx5E8A/json?size=700'
r = requests.get(url)
data = r.json()


def transform_format(mday):  # 寫個轉換日期顯示格式小函式
    Y, M, D, h, m, s = mday[:4], mday[4:6], mday[6:8], mday[8:10], mday[10:12], mday[12:14]
    return Y + '/' + M + '/' + D + ' ' + h + ':' + m + ':' + s


print('擷取的資料筆數:',len(data))

ui = 0
for u in range(len(data)):  # 逐筆讀取json資料
    if data[u]['sarea'] == '土城區':    # 判斷是否為「土城區」,屬於土城區的資料才呈現
        ui += 1
        data[u]['mday'] = transform_format(data[u]['mday'])  # 轉化「資料更新時間」顯示格式
        print(data[u])

print("「土城區」共有:",ui,"筆資料!")


程式執行結果截圖如下供參:

2021年5月9日 星期日

【簡單玩python】~~整理python中有關檔案(File)的一些常用操作

 有關檔案(目錄)的操作,在程式設計中是常見的需求。

除了對檔案的存取、寫入等相關操作外,對於檔案的查詢、目錄(資料夾)的管理、操作也是重要的議題

這次就來整理一下,python中對於檔案及資料夾的一些重要操作,方便自己日後複習及應用。

好囉~~一樣直接上程式碼!相關語法及功能,可以參考程式碼中的註記。

import os
import time

print(os.getcwd())  # 獲取當前作用(執行)的目錄路徑

if os.path.exists('mkdir_test'):
    print("資料夾已存在,無須建立!")
else:
    os.mkdir('mkdir_test')     # 在當前目錄中建立新資料夾(若目錄已經存在則會出錯)

os.chdir('mkdir_test')  # 切換至指定的資料夾
print(os.getcwd())
os.chdir('../')  # 切換至指定的資料夾
print(os.getcwd())

# os.listdir()將指定目錄(若未指定則為當前作用中之目錄)中的物件都列出
print("資料夾中共有:", len(os.listdir()),"物件")

for f in os.listdir():
    if os.path.isfile(f):   # 檢查是否為檔案
        f_name, f_ext = os.path.splitext(f)  # 將檔案名稱資訊切割檔名及副檔名(類型)
        f_size = os.path.getsize(f)     # 取得檔案大小資訊
        f_time = time.ctime(os.path.getctime(f))
        print("檔名:", f_name, "| 檔案類型:", f_ext[1:], " | 檔案大小:", f_size, "Bytes | 檔案建立時間:", f_time)

# 檔案開啟模式參考網址:https://docs.python.org/zh-tw/3.6/library/functions.html#open
f = open("test1.txt", "a+", encoding='utf-8')  # 若無該檔案會建立,若有則會開啟並可在檔案末尾加上新的內容
str = "\n" + "Hello,歡迎進入Python世界"
fw = f.write(str)
print("本次寫入", fw, "個字元")
f.close()

f1 = open("test1.txt", "r+", encoding='utf-8')  # 讀取並開啟檔案,可在檔案末尾加上新的內容
print(f1.read())
f1.close()

有興趣及相關需求的朋友可以自行操作、執行,會更加了解相關的運作結果喔!

執行結果,部分截圖供參: