Category: Python

  • Why python 2: negative number cannot be raised to a fractional power, but work on Python 3

    問題是這個樣子的 ➜ cpython git:(84471935ed) ✗ python2 Python 2.7.15 (default, Jun 27 2018, 13:05:28) [GCC 8.1.1 20180531] on linux2 Type “help”, “copyright”, “credits” or “license” for more information. >>> (-1) ** .5 Traceback (most recent call last): File “<stdin>”, line 1, in <module> ValueError: negative number cannot be raised to a fractional power >>> ➜ cpython…

  • 手動修復交通部 CCTV 錯誤的 GPS 資料

    手動修復交通部 CCTV 錯誤的 GPS 資料

    最近在做一個手機 APP,用到了來自 data.gov.tw 的資料,分別是「省道交控路側設備資料」、「CCTV 靜態資訊(cctv_info.xml.gz)」以及「CCTV 動態資訊(cctv_value.xml.gz)」。 開放資料的慘況 裡面最關鍵的資料就是靜態資訊的 px 以及 py ,也就是 WGS84 的 Longitude 以及 Latitude。可是根據我實際測驗我的 APP 的結果,靜態資訊的地方有著大量的誤差,誤差範圍從 20 公尺到 2000 公尺都有,導致我的 APP 運行的結果非常糟糕。 山不轉路轉 於是就要想辦法解決這個問題了,問題是我該怎麼做到呢……靈機一動看到了這個東西: 資料格式: <Info cctvid=”nfbCCTV-T72-W-3.1-M“roadsection=”快速公路72號…… 沒錯,在 cctvid 的地方,有里程的資訊!也就是說,我只要使用正確的里程牌資料,就應該能夠推導出正確的 GPS 位置才是,所以就在 data.gov.tw 找到另一份資料「省道里程座標」。但是,你知道這東西怎麼出來的嗎?讓我們一同閱讀一下說明: 本圖資係本局32個養護工務段同仁於現地里程牌旁,利用平板電腦ViewPad7內建GPS量測坐標值後,經本局規劃組彙整轉檔產出(點圖層),定位精度受測量當時衛星幾何分布情況而有所差異,誤差約25公尺(ViewPad7其內建GPS與AGPS,GPS精度一般標準15~25公尺,若啟用AGPS則可提升至5~10公尺) 就是人工站到里程牌旁邊,然後打開平板電腦點出資料的………我的老天這方法真是太棒了呢……而且這個測量方法之下也沒有快速道路的里程牌,因此轉往其他地方看看。 換個地方找乾淨資料 找著找著就發現到「GIS-T 通網路地理資訊倉儲系統」,看到基礎圖資有「快速道路里程牌(樁號)」,Bingo!接著到圖台展示的地方看一下資料的狀況: 謝天謝地竟然可以用而且還真的有資料!接著就要把資料拿出來了,首先看到路網數值圖,然後看到圖資申購,然後再看到需要花錢,心都涼了一截……整份資料學生要五千,個人要五萬,QQ。 但是轉頭一看,發現網站上另一個地方的圖資供應,有個「圖資下載服務」,立刻打上關鍵字「里程牌」: 果然天無絕人之路!找到新鮮的資料啦! 處理資料取得 CCTV 正確 GPS 位置 我的想法是這樣:既然我們有 CCTV 的里程位置 (e.g. 003K+375),那我們是不是就可以透過兩個正確的里程牌資料,推算出正確的 CCTV GPS 位置? 以上面的里程位置為例,我們只要知道…

  • 我在 2017 年 8 月中前在 CPython 的貢獻

    我在 2017 年 8 月中前在 CPython 的貢獻

    我從 2017 年的 2 月下旬開始踏入 CPython contribute 的領域。自 CPython 在 2017 年 2 月 24 日首次合併我所提交的 patch 之後,我在這段期間持續的為 CPython 貢獻了一些的 patches 以及 pull requests。這篇文章記錄了我這段時間的狀況。 合併統計 $ git log –after=2017-2-23 –reverse –author=mlouielu –author=Louie –pretty=format:”%h: %s” > 2017 $ wc -l 2017 19 2017 $ cat 2017 357bad7101: bpo-29634: Reduce deque repeat execution when maxlen exist and…

  • pathlib — 物件導向的檔案系統路徑 — 你所不知道的 Python 標準函式庫用法 12

    pathlib — 物件導向的檔案系統路徑 — 你所不知道的 Python 標準函式庫用法 12

    pathlib – 物件導向的檔案系統路徑 This module offers classes representing filesystem paths with semantics appropriate for different operating systems. Path classes are divided between pure paths, which provide purely computational operations without I/O, and concrete paths, which inherit from pure paths but also provide I/O operations. Source code: Lib/pathlib.py   01. Quickstart Tutorial 使用 pathlib.Path 來表示一個路徑,對於 Path 物件,我們可以透過 / 來串接路徑: >>> import…

  • inspect — 探測 Python 物件內容 — 你所不知道的 Python 標準函式庫用法 11

    inspect — 探測 Python 物件內容 — 你所不知道的 Python 標準函式庫用法 11

    inspect – 探測 Python 物件內容 The inspect module provides several useful functions to help get information about live objects such as modules, classes, methods, functions, tracebacks, frame objects, and code objects. For example, it can help you examine the contents of a class, retrieve the source code of a method, extract and format the argument list for…

  • (那些過時的) Python 字串格式化以及 f-string 字串格式化

    (那些過時的) Python 字串格式化以及 f-string 字串格式化

    在 Python 裡頭,目前的最新版本 (3.6.2) 中總共有 3 種不同的方式來達成字串格式化 (String format)。分別是 %-formatting、str.format 以及 f-string。本文將會逐一介紹這些 Python 的字串格式化方式。 01. %-formatting 偉大的 C 語言字串格式化深入我們的生活,Python 自然也不意外的會有這個功能。 >>> ‘Python version: %.1f’ % (3.6) ‘Python version: 3.6’ >>> ‘We have %d apple, %d banana’ % (10, 20) ‘We have 10 apple, 20 banana’ >>> ‘Hello, %s’ % (‘Denny’) ‘Hello Denny’ 從今天開始,忘了它。 02. str.format…

  • secrets — 生成用於密碼層級的亂數 — 你所不知道的 Python 標準函式庫用法 10

    secrets — 生成用於密碼層級的亂數 — 你所不知道的 Python 標準函式庫用法 10

    secrets – 生成用於密碼層級的亂數 The secrets module is used for generating cryptographically strong random numbers suitable for managing data such as passwords, account authentication, security tokens, and related secrets. Source code: Lib/secrets.py secrets 模組的用意,是為了要在 Python 內提供一個適用於密碼層級的亂數產生機制,透過 secrets 我們可以輕鬆的產生密碼強度的亂數以及亂數選擇元素,從而避免使用者使用 random 模組來產生隨機亂數並將之用於密碼上。這個模組目前只在 Python 3.6 以後的版本才有,請各位更新到最新版本來使用。 01. Quickstart Tutorial 產生密碼強度的隨機亂數: >>> import secrets >>> secrets.token_bytes() b’\x1c\xc7\xd0H\xddY\xdb\x00\xf2\xe0\xd9%\xa2<|T\xcf\xe5\x937\xbc\x15(\xce~p\xca9\xc3u\xed)’ >>> secrets.token_bytes() b’\x13 \x87\xa2\x95]\n\xec\x80\x16=)\x11}4\x17\x07\xf8\t\x99\x16\xb3\xaf\x97u\x8a\x08uY*\xa8\x83′ >>> 產生密碼強度的隨機字串 >>> secrets.token_hex() ‘e41210fd028b4fdb8d6d58f9f22a080068afc1478b866d09a7d220c0229031cd’…

  • tracemalloc — 記憶體配置除錯 — 你所不知道的 Python 標準函式庫用法 09

    tracemalloc — 記憶體配置除錯 — 你所不知道的 Python 標準函式庫用法 09

    tracemalloc – 記憶體配置除錯 The tracemalloc module is a debug tool to trace memory blocks allocated by Python. Source code: Lib/tracemalloc.py 透過 tracemalloc 將可以記錄下 Python 的記憶體區塊配置狀況,同時透過這些記錄來輸出有用的記憶體配置資訊,例如說執行記憶體配置的檔案以及行數、記憶體區塊大小等。也可以透過比對兩個不同的記憶體區塊快照,來找出記憶體洩漏的問題。 01. Quickstart Tutorial 我們透過 start() 開始記憶體除錯的功能: >>> import tracemalloc >>> tracemalloc.start() 結束時使用 stop() 結束除錯: >>> tracemalloc.stop() 想要記錄下當前的記憶體配置就使用 snapshot(): >>> snap = tracemalloc.take_snapshot() 認識這三個基本 API 後,我們就可以開始應用 tracemalloc。 # tm_snap_stats.py import tracemalloc import sys #…

  • atexit — 程式關閉時回呼 — 你所不知道的 Python 標準函式庫用法 08

    atexit — 程式關閉時回呼 — 你所不知道的 Python 標準函式庫用法 08

    atexit – Exit handlers The atexit module defines functions to register and unregister cleanup functions. Functions thus registered are automatically executed upon normal interpreter termination. atexit runs these functions in the reverse order in which they were registered; if you register A, B, and C, at interpreter termination time they will be run in the order C, B, A. 官方介紹文件:29.8. atexit — Exit handlers atexit 套件用來註冊當程式結束時要執行的函式。被 atexit 註冊的函式,會在程式正常結束的時機點被執行。執行的順序為先註冊後執行…

  • enum — 枚舉型態 — 你所不知道的 Python 標準函式庫用法 07

    enum — 枚舉型態 — 你所不知道的 Python 標準函式庫用法 07

    enum – Support for enumerations An enumeration is a set of symbolic names (members) bound to unique, constant values. Within an enumeration, the members can be compared by identity, and the enumeration itself can be iterated over. 官方介紹文件:8.13. enum — Support for enumerations enum 是 Python 裏用來建立枚舉形態的標準函式庫。enum 算是比較新的標準函式庫,學習 enum 可以讓你輕鬆建立枚舉,改寫以前單獨使用 const variable 的狀況。 01. Quickstart Tutorial 從今天開始,讓我們把這樣枚舉的 Code: #…