千萬不要在迴圈裡面刪除陣列元素

「踩你千萬遍也不厭倦的愚蠢行為」,我一直以為錯誤的寫法只要遇過一次就會長記性,但今天在公司又踩地雷三小時,始終搞不懂問題在哪裡,最後很認真把程式碼重看過一次後發現… 原來又是一樣的問題。 一句話:「不要擅迴圈裡面刪除任何陣列元素」

繼續閱讀 千萬不要在迴圈裡面刪除陣列元素

Python Global Exception Handler

一般來說例外處理不會是全域性質的,因為當我們將例外處理套用到全域時,我們很難確認問題發生在哪裡並處理,但少數情況下我們會需要撰寫出這樣的程式碼,以這次為例,我用 Python 撰寫程式去處理 webhook,但因為伺服器那邊送來的資訊太多樣化,我需要在將任何例外發生的時候,能夠把當環境資料印出來,方便事後除錯,這種時候就確實該使用 Global Exception Hook 的技巧。

繼續閱讀 Python Global Exception Handler

Python Join with Lambda – 更客製化的 Join

寫程式的人對 split()、join() 兩個東西肯定不陌生,在 Python 裡面我們可以透過 String.join(list) 把 List 合併成字串,例如 “,".join([“A", “B", “C"]) 會回傳 “A,B,C" 字串,或是反過來透過 “A,B,C".split(“,") 來拆成 List,但你一定有過這樣的需求卻無法解決吧:

  • 把字串合併但首字大寫
  • List 裡面存的是數字,但 join 需要是字串才可以處理

這些問題可以透過 List Comprehension 解決,例如型態處理的部份可以像這樣撰寫語法:

nums = [1,2,3,4,5]
nums_str = [str(num) for num in nums]
print(",".join(nums_str))

但除了 List Comprehension 以外還有其他解法嗎? 你肯定也想過像 sort 那樣傳送 lambda function 給 join 吧!

繼續閱讀 Python Join with Lambda – 更客製化的 Join

Python 漢語拼音處理(姓名中翻英、地址中翻英)

今天幫同事處理大量的姓名、地址中翻英需求,研究了 Python 在漢語拼音方面的作法,畢竟你總不能一筆一筆複製到郵局或是網站上吧(笑),結果出乎意料的簡單,地址翻譯的部分透過各家的 Geocoder API 即可處理,漢語拼音則是有第三方的 Library 可以使用,而且翻譯效果還不錯,不能說盡善盡美,但搭配工人智慧足以彌補那小小的缺陷,畢竟如果要解決最後的小缺陷,可能要投入大量的資源、技術,導入機器學習的方法來處理(其實之後會有興趣做看看,畢竟在華文圈裡面好用的工具真的太少了)。

繼續閱讀 Python 漢語拼音處理(姓名中翻英、地址中翻英)

How to make elasticsearch.py Fast (Bulk Operate)

用 Python 操作 Elasticsearch 時不免俗的肯定會安裝官方推出的 elasticsearch.py,最近在用 Python 接收 Email Log 並寫入 Elasticsearch 時有蠻多心得可以分享的,大家都知道 AWS lambda 是用執行時間算錢的,所以在撰寫 AWS Lambda 時我可說是分秒必爭,看到執行超過 0.5 秒就各種吐血,所以從最開始的 .index 一筆一筆插入資料到 Elasticsearch,到後來用 streaming_bulk 處理,最後受不了用 parallel_bulk 混合 streaming_bulk 操作,以下就來聊聊這幾種方式的差異以及地雷吧!

繼續閱讀 How to make elasticsearch.py Fast (Bulk Operate)

Python Convert String to Boolean

今天在撰寫 AWS Lambda 時因為從環境變數讀取設定的關係,需要把字串轉成布林來做判斷,一般的想法不外乎 Python 會幫你轉換,或是用 bool(“True") 轉換就可以,首先其實 Python 是不會幫你轉換的,這點很重要! Python 在形態方面其實是不會做自動轉換的,他只會很阿莎力的報錯,不過大家肯定想說用 bool() 轉換就沒問題了吧!? 事實上,這個地雷害我今天搞了半小時才解決…

繼續閱讀 Python Convert String to Boolean

How to use Python GroupBy Data (List+Dict)

用 Python 處理資料時,對資料的某個 Key 進行 GroupBy 是很常見的需求,例如分析 Email Log 時,想知道某個標題的發送統計數,或是列出每個標題的 Email Provider 前五名之類,就會需要對標題進行 GroupBy 的動作,在資料庫裡這是十分簡單的事情,但如果你不想丟資料庫的話呢?

除了 Pandas 這套超強的資料處理函式庫可以幫你之外,其實 Python 本身也有 GroupBy 可以使用哦!

繼續閱讀 How to use Python GroupBy Data (List+Dict)

身為一個會眾我看到了什麼 – PyCon Taiwan 2016

距離 PyCon Taiwan 2016 已經過了快一個月,這次很感謝 jserv 大大的贈票計畫,讓我有機會參加這場台灣 Python 開發者的年度盛會,活動結束後我一直在思考要用什麼角度去寫這篇心得,過去在社群活動比較常擔任志工的角色,這次 PyCon 難得我是會眾,所以就決定要用會眾的角度來寫一篇檢討文,說明在今年 PyCon Taiwan 我看到的好與壞,好的部分,值得其他研討會學習,不好的部分,也值得大家做借鏡並改善。

繼續閱讀 身為一個會眾我看到了什麼 – PyCon Taiwan 2016

uWSGI

介紹

uWSGI 是一種協議,同時它也是一個程式。

為什麼這麼複雜?從程式講起吧,uWSGI 這個程式最初是為了讓 Python 所撰寫的 Web Application 能夠跟 Nginx、Apache 等等的 Web Server 溝通而設計的,他採用自己設計的 uwsgi 通訊協議,此外他也支援 cgi、fastcgi、socket 等多種協議,所以除了服務 Python 之外,他也可以跟 PHP、Go 等等的程式語言整合。

繼續閱讀 uWSGI

如何在Linux裡面手動安裝Python並且避免yum不能運作的問題

之前曾經寫過一個程式可以自動備份Linux裡的重要資料並且上傳到Google Storage,當時用的語言是Python 2.7,但是Linux裡面內建的Python是2.4,而且就算你用yum去進行升級,最高也只會到2.4,這時候你如果想要安裝更新版的Python就只能自行編譯了,下面將用Python 3.2進行教學

繼續閱讀 如何在Linux裡面手動安裝Python並且避免yum不能運作的問題