<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Python on Lin's Blog</title><link>http://coder.tw/tags/python/</link><description>Recent content in Python on Lin's Blog</description><generator>Hugo</generator><language>zh-tw</language><lastBuildDate>Sat, 16 Jun 2018 01:12:08 +0000</lastBuildDate><atom:link href="http://coder.tw/tags/python/index.xml" rel="self" type="application/rss+xml"/><item><title>Why Python No Output With Tee</title><link>http://coder.tw/posts/why-python-no-output-with-tee/</link><pubDate>Sat, 16 Jun 2018 01:12:08 +0000</pubDate><guid>http://coder.tw/posts/why-python-no-output-with-tee/</guid><description>&lt;p&gt;最近用 Python 寫了個 Slack Bot，因為偷懶所以我把 log 訊息直接 print 出來後用 tee 指令存到檔案裡，這樣就可以同時在 console 看到運作的資訊，又能將這些資訊保留到檔案裡，不過在用 Python print() 搭配 tee 時我卻發現我指定的 log File 常常沒有內容，或是該出現的訊息很晚才出現，研究後才知道原來 Python 的 print 函式會判斷輸出的環境，如果是輸出到 Shell 的話會立刻輸出，但如果不是輸出到 Shell 則會先存在 Buffer，等緩衝區滿了再一次輸出，當你把 Python 搭配 tee 使用時就會遇到緩衝區的問題，導致預期的輸出沒有及時出現在螢幕和檔案中。&lt;/p&gt;</description></item><item><title>Python Generate Datetime Series</title><link>http://coder.tw/posts/python-generate-datetime-series/</link><pubDate>Sun, 30 Jul 2017 02:30:16 +0000</pubDate><guid>http://coder.tw/posts/python-generate-datetime-series/</guid><description>&lt;p&gt;在 Excel 很簡單的拖曳就可以產生連續的日期們，而在 Python 你可以利用 datetime 和 timedelta 兩個模組做到類似的事情，不管是要間隔一小時、間格一天、間隔一個月都可以做到。&lt;/p&gt;</description></item><item><title>Python 3 在 Windows 命令提示字元輸出時遇到 CP950 錯誤</title><link>http://coder.tw/posts/python-cp950-encoding-error-windows-console/</link><pubDate>Tue, 21 Feb 2017 23:59:09 +0000</pubDate><guid>http://coder.tw/posts/python-cp950-encoding-error-windows-console/</guid><description>&lt;p&gt;今天在教學弟妹寫程式時，用 Python 印出一段中文字到命令提示字元，卻遇到「UnicodeEncodeError: &amp;lsquo;cp950&amp;rsquo; codec can&amp;rsquo;t encode character」這個錯誤，嘗試了各種方法都無法解決，最後爬了文章才搞懂是怎麼回事。&lt;/p&gt;
&lt;p&gt;看到這段錯誤，有經驗的開發者直覺就會認定是字串裡面有特殊字元，立馬給它加上 ignore 參數卻沒有效果，我遇到的情況檢查後發現是一個日文字，但眾所皆知 Python 3 預設使用 Unicode 字串，不應該會有無法輸出的問題才對，又不是萬惡的 Big5&amp;hellip;&lt;/p&gt;</description></item><item><title>千萬不要在迴圈裡面刪除陣列元素</title><link>http://coder.tw/posts/python-dont-delete-list-in-loop/</link><pubDate>Thu, 12 Jan 2017 20:35:34 +0000</pubDate><guid>http://coder.tw/posts/python-dont-delete-list-in-loop/</guid><description>&lt;p&gt;「踩你千萬遍也不厭倦的愚蠢行為」，我一直以為錯誤的寫法只要遇過一次就會長記性，但今天在公司又踩地雷三小時，始終搞不懂問題在哪裡，最後很認真把程式碼重看過一次後發現&amp;hellip; 原來又是一樣的問題。 一句話：「不要擅迴圈裡面刪除任何陣列元素」&lt;/p&gt;</description></item><item><title>Python Global Exception Handler</title><link>http://coder.tw/posts/python-global-exception-handler/</link><pubDate>Mon, 02 Jan 2017 15:00:12 +0000</pubDate><guid>http://coder.tw/posts/python-global-exception-handler/</guid><description>&lt;p&gt;一般來說例外處理不會是全域性質的，因為當我們將例外處理套用到全域時，我們很難確認問題發生在哪裡並處理，但少數情況下我們會需要撰寫出這樣的程式碼，以這次為例，我用 Python 撰寫程式去處理 webhook，但因為伺服器那邊送來的資訊太多樣化，我需要在將任何例外發生的時候，能夠把當環境資料印出來，方便事後除錯，這種時候就確實該使用 Global Exception Hook 的技巧。&lt;/p&gt;</description></item><item><title>Python Join with Lambda - 更客製化的 Join</title><link>http://coder.tw/posts/python-join-with-lambda/</link><pubDate>Tue, 13 Dec 2016 16:05:52 +0000</pubDate><guid>http://coder.tw/posts/python-join-with-lambda/</guid><description>&lt;p&gt;寫程式的人對 split()、join() 兩個東西肯定不陌生，在 Python 裡面我們可以透過 String.join(list) 把 List 合併成字串，例如 &amp;ldquo;,&amp;quot;.join([&amp;ldquo;A&amp;rdquo;, &amp;ldquo;B&amp;rdquo;, &amp;ldquo;C&amp;rdquo;]) 會回傳 &amp;ldquo;A,B,C&amp;rdquo; 字串，或是反過來透過 &amp;ldquo;A,B,C&amp;rdquo;.split(&amp;rdquo;,&amp;quot;) 來拆成 List，但你一定有過這樣的需求卻無法解決吧：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;把字串合併但首字大寫&lt;/li&gt;
&lt;li&gt;List 裡面存的是數字，但 join 需要是字串才可以處理&lt;/li&gt;
&lt;/ul&gt;
這些問題可以透過 List Comprehension 解決，例如型態處理的部份可以像這樣撰寫語法：
&lt;pre&gt;nums = [1,2,3,4,5]
nums_str = [str(num) for num in nums]
print(",".join(nums_str))&lt;/pre&gt;
但除了 List Comprehension 以外還有其他解法嗎？ 你肯定也想過像 sort 那樣傳送 lambda function 給 join 吧！</description></item><item><title>Python 漢語拼音處理（姓名中翻英、地址中翻英）</title><link>http://coder.tw/posts/python-chinese-to-pinyin-conversion/</link><pubDate>Fri, 09 Dec 2016 00:05:43 +0000</pubDate><guid>http://coder.tw/posts/python-chinese-to-pinyin-conversion/</guid><description>&lt;p&gt;今天幫同事處理大量的姓名、地址中翻英需求，研究了 Python 在漢語拼音方面的作法，畢竟你總不能一筆一筆複製到郵局或是網站上吧（笑），結果出乎意料的簡單，地址翻譯的部分透過各家的 Geocoder API 即可處理，漢語拼音則是有第三方的 Library 可以使用，而且翻譯效果還不錯，不能說盡善盡美，但搭配工人智慧足以彌補那小小的缺陷，畢竟如果要解決最後的小缺陷，可能要投入大量的資源、技術，導入機器學習的方法來處理（其實之後會有興趣做看看，畢竟在華文圈裡面好用的工具真的太少了）。&lt;/p&gt;</description></item><item><title>How to make elasticsearch.py Fast (Bulk Operate)</title><link>http://coder.tw/posts/how-to-make-elasticsearch-py-fast-bulk-operate/</link><pubDate>Thu, 08 Dec 2016 00:57:01 +0000</pubDate><guid>http://coder.tw/posts/how-to-make-elasticsearch-py-fast-bulk-operate/</guid><description>&lt;p&gt;用 Python 操作 Elasticsearch 時不免俗的肯定會安裝官方推出的 &lt;a href="https://elasticsearch-py.readthedocs.io/en/master/"&gt;elasticsearch.py&lt;/a&gt;，最近在用 Python 接收 Email Log 並寫入 Elasticsearch 時有蠻多心得可以分享的，大家都知道 AWS lambda 是用執行時間算錢的，所以在撰寫 AWS Lambda 時我可說是分秒必爭，看到執行超過 0.5 秒就各種吐血，所以從最開始的 .index 一筆一筆插入資料到 Elasticsearch，到後來用 streaming_bulk 處理，最後受不了用 parallel_bulk 混合 streaming_bulk 操作，以下就來聊聊這幾種方式的差異以及地雷吧！&lt;/p&gt;</description></item><item><title>Python Convert String to Boolean</title><link>http://coder.tw/posts/python-convert-string-to-boolean/</link><pubDate>Thu, 08 Dec 2016 00:18:21 +0000</pubDate><guid>http://coder.tw/posts/python-convert-string-to-boolean/</guid><description>&lt;p&gt;今天在撰寫 AWS Lambda 時因為從環境變數讀取設定的關係，需要把字串轉成布林來做判斷，一般的想法不外乎 Python 會幫你轉換，或是用 bool(&amp;ldquo;True&amp;rdquo;) 轉換就可以，首先其實 Python 是不會幫你轉換的，這點很重要！ Python 在形態方面其實是不會做自動轉換的，他只會很阿莎力的報錯，不過大家肯定想說用 bool() 轉換就沒問題了吧！？ 事實上，這個地雷害我今天搞了半小時才解決&amp;hellip;&lt;/p&gt;</description></item><item><title>How to use Python GroupBy Data (List+Dict)</title><link>http://coder.tw/posts/how-to-use-python-groupby-data-listdict/</link><pubDate>Wed, 07 Dec 2016 01:13:27 +0000</pubDate><guid>http://coder.tw/posts/how-to-use-python-groupby-data-listdict/</guid><description>&lt;p&gt;用 Python 處理資料時，對資料的某個 Key 進行 GroupBy 是很常見的需求，例如分析 Email Log 時，想知道某個標題的發送統計數，或是列出每個標題的 Email Provider 前五名之類，就會需要對標題進行 GroupBy 的動作，在資料庫裡這是十分簡單的事情，但如果你不想丟資料庫的話呢？&lt;/p&gt;
&lt;p&gt;除了 Pandas 這套超強的資料處理函式庫可以幫你之外，其實 Python 本身也有 GroupBy 可以使用哦！&lt;/p&gt;</description></item><item><title>身為一個會眾我看到了什麼 - PyCon Taiwan 2016</title><link>http://coder.tw/posts/pycon-taiwan-2016-recap/</link><pubDate>Thu, 23 Jun 2016 15:09:56 +0000</pubDate><guid>http://coder.tw/posts/pycon-taiwan-2016-recap/</guid><description>&lt;p&gt;距離 PyCon Taiwan 2016 已經過了快一個月，這次很感謝 jserv 大大的贈票計畫，讓我有機會參加這場台灣 Python 開發者的年度盛會，活動結束後我一直在思考要用什麼角度去寫這篇心得，過去在社群活動比較常擔任志工的角色，這次 PyCon 難得我是會眾，所以就決定要用會眾的角度來寫一篇檢討文，說明在今年 PyCon Taiwan 我看到的好與壞，好的部分，值得其他研討會學習，不好的部分，也值得大家做借鏡並改善。&lt;/p&gt;</description></item><item><title>uWSGI</title><link>http://coder.tw/posts/uwsgi/</link><pubDate>Fri, 24 Jul 2015 19:17:45 +0000</pubDate><guid>http://coder.tw/posts/uwsgi/</guid><description>&lt;h1&gt;介紹&lt;/h1&gt;
uWSGI 是一種協議，同時它也是一個程式。
&lt;p&gt;為什麼這麼複雜？從程式講起吧，uWSGI 這個程式最初是為了讓 Python 所撰寫的 Web Application 能夠跟 Nginx、Apache 等等的 Web Server 溝通而設計的，他採用自己設計的 uwsgi 通訊協議，此外他也支援 cgi、fastcgi、socket 等多種協議，所以除了服務 Python 之外，他也可以跟 PHP、Go 等等的程式語言整合。&lt;/p&gt;</description></item><item><title>如何在Linux裡面手動安裝Python並且避免yum不能運作的問題</title><link>http://coder.tw/posts/linux-install-python-manually-keep-yum/</link><pubDate>Fri, 19 Aug 2011 08:00:45 +0000</pubDate><guid>http://coder.tw/posts/linux-install-python-manually-keep-yum/</guid><description>&lt;p&gt;之前曾經寫過一個程式可以自動備份Linux裡的重要資料並且上傳到Google Storage，當時用的語言是Python 2.7，但是Linux裡面內建的Python是2.4，而且就算你用yum去進行升級，最高也只會到2.4，這時候你如果想要安裝更新版的Python就只能自行編譯了，下面將用Python 3.2進行教學&lt;/p&gt;</description></item><item><title>讓Python安裝模組變得更簡單～ easy_install使用教學+egg檔安裝教學</title><link>http://coder.tw/posts/python-easy-install-tutorial/</link><pubDate>Sun, 01 May 2011 16:50:04 +0000</pubDate><guid>http://coder.tw/posts/python-easy-install-tutorial/</guid><description>&lt;p&gt;&lt;a href="https://pub-6c026d2742d14927bfa2d850c31eac91.r2.dev/wp-content/uploads/2011/05/2011-05-01_170827.jpg"&gt;&lt;img class="aligncenter" title="2011-05-01_170827" src="https://pub-6c026d2742d14927bfa2d850c31eac91.r2.dev/wp-content/uploads/2011/05/2011-05-01_170827-540x352.jpg" alt="" width="540" height="352" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;大家都知道Python這套程式語言的特點就是它的擴充性極高，可以安裝一些第三方的模組來達到你想要的功能，例如你想要使用「中文」來寫程式的話可以安裝zhpy這個模組，但是安裝這些模組說難也還好，就是很麻煩，有些可能只要按下一步就好了，有些可能還要去調整系統的設定，在這裡要介紹一個程式叫做「easy_install」，它可以讓你的Pythonm樣安裝模組時變得很簡單，用法跟Linux的yum其實很類似，有了他你只需要一行指令就可以安裝好模組啦～ 另外easy_install還有一個功能就是可以幫你安裝所謂的egg格式&lt;/p&gt;
&lt;h2&gt;</description></item><item><title>【Python】踏入Python世界的第一步：HelloWorld(輸出文字與註解的寫法)</title><link>http://coder.tw/posts/python-hello-world-first-step/</link><pubDate>Sun, 20 Feb 2011 09:00:54 +0000</pubDate><guid>http://coder.tw/posts/python-hello-world-first-step/</guid><description>&lt;p style="text-align: center;"&gt;&lt;a href="https://pub-6c026d2742d14927bfa2d850c31eac91.r2.dev/wp-content/uploads/2011/02/2011-02-18_231056.jpg"&gt;&lt;img class="size-large wp-image-315 aligncenter" title="2011-02-18_231056" src="https://pub-6c026d2742d14927bfa2d850c31eac91.r2.dev/wp-content/uploads/2011/02/2011-02-18_231056-540x393.jpg" alt="" width="540" height="393" /&gt;&lt;/a&gt;&lt;/p&gt;
幾乎所有教程式語言的書籍，他的第一個練習程式都是HelloWorld，所謂的HelloWorld就是要讓程式輸出「HelloWorld」，而在這篇文章裡面我們會教大家寫出第一個Python的程式，並且簡單講解Python的一些用法</description></item><item><title>【Python】Python直譯器安裝教學</title><link>http://coder.tw/posts/python-interpreter-install-tutorial/</link><pubDate>Fri, 18 Feb 2011 22:01:26 +0000</pubDate><guid>http://coder.tw/posts/python-interpreter-install-tutorial/</guid><description>&lt;p style="text-align: center;"&gt;&lt;a href="https://pub-6c026d2742d14927bfa2d850c31eac91.r2.dev/wp-content/uploads/2011/02/2011-02-15_214318.jpg"&gt;&lt;img class="size-full wp-image-274 aligncenter" title="2011-02-15_214318" src="https://pub-6c026d2742d14927bfa2d850c31eac91.r2.dev/wp-content/uploads/2011/02/2011-02-15_214318.jpg" alt="" width="511" height="297" /&gt;&lt;/a&gt;&lt;/p&gt;
最近因為在玩Google Storage的關係，所以就把我塵封已久的Python書拿出來看了一下，順便搭配Google Code上的說明文件，寫了一個自動備份的小程式，目前這程式還很簡單所以先不公布出來，不過寫了這個小程式之後才讓我發現Python是一個蠻簡單的程式語言，在入手的難易度還有嚴謹度上面跟VB不相上下，但是在囉嗦程度上面Python卻贏過VB（我是說VB比較囉嗦的意思XD），例如在VB裡面的判斷式要寫成if.....then.......end if，可是在Python只要if....:就完成了，還有在Python裡面縮排很重要，沒縮排好就會導致程式無法執行，因為他的編譯器是利用縮排來判斷你的選擇結構、迴圈這些東西是否執行完畢，我個人還蠻建議新手來學Python的說，可以讓你寫出很漂亮的程式碼～</description></item></channel></rss>