<?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>https://coder.tw/ja/tags/python/</link><description>Recent content in Python on Lin's Blog</description><generator>Hugo</generator><language>ja-JP</language><lastBuildDate>Sun, 12 Mar 2023 13:25:45 +0000</lastBuildDate><atom:link href="https://coder.tw/ja/tags/python/index.xml" rel="self" type="application/rss+xml"/><item><title>Python の警告を正しく無視する方法</title><link>https://coder.tw/ja/posts/how-to-ignore-python-warning/</link><pubDate>Sun, 12 Mar 2023 13:25:45 +0000</pubDate><guid>https://coder.tw/ja/posts/how-to-ignore-python-warning/</guid><description>&lt;p&gt;Python を書いていると、解決できない警告や、あまり意味のない警告に出会うことがあります。たとえば、OpenPyxl を使っていた頃、次のような警告が何度も表示されました：&lt;code&gt; warn("Workbook contains no default style, apply openpyxl's default")&lt;/code&gt;。この警告は、OpenPyxl が読み込んだファイルに既定のスタイルを自動で適用する、ということを知らせるものです。では、どう解決するのかというと、Office でその Excel ファイルを開いて保存し直せばよいのです。私の場合、プログラムは Excel ファイルの内容だけを使っていて、スタイルは結果に影響しないので、この警告はあまり重要ではありません。&lt;/p&gt;
&lt;p&gt;警告が出たときは、私はいつも、なぜその警告が出ているのかを確認して考えるようにしています。自分に影響がないと確認できたら、コードの中で無視します。「この警告は重要ではない」と開発者が覚えておくことに頼るのではなく、です。単に見えなくするのではなく、「表示されたすべての警告に対処する」という良い習慣を身につけるためです。&lt;/p&gt;</description></item><item><title>Python で進捗バーのような表示を出力する方法</title><link>https://coder.tw/ja/posts/python-print-progress-bar/</link><pubDate>Sat, 18 Feb 2023 16:16:32 +0000</pubDate><guid>https://coder.tw/ja/posts/python-print-progress-bar/</guid><description>&lt;figure class="wp-block-image size-full"&gt;&lt;img src="https://pub-6c026d2742d14927bfa2d850c31eac91.r2.dev/wp-content/uploads/2023/02/CleanShot-2023-02-18-at-16.00.47.gif" alt="" class="wp-image-7786"/&gt;&lt;/figure&gt;
&lt;p&gt;少し前に、研究室のお菓子の会計ツールを開発していたときに学んだちょっとしたテクニックです。ターミナルで進捗バーのような表示、つまり「その場に文字を出力して、古い文字を消す」ことをしたい場合は、この記事を参考にしてください（ほかの言語でも同じ原理です）。&lt;/p&gt;</description></item><item><title>Python の出力が tee で表示されない理由</title><link>https://coder.tw/ja/posts/why-python-no-output-with-tee/</link><pubDate>Sat, 16 Jun 2018 01:12:08 +0000</pubDate><guid>https://coder.tw/ja/posts/why-python-no-output-with-tee/</guid><description>&lt;p&gt;最近 Python で Slack Bot を作りました。横着をして、log のメッセージを print でそのまま出力し、tee コマンドでファイルに保存していました。こうすると、コンソールで動作の情報を見ながら、同じ情報をファイルにも残せます。ところが Python の print() と tee を組み合わせて使うと、指定した log ファイルの中身がよく空っぽになったり、本来すぐ出るはずのメッセージがずっと後になって出てきたりしたのです。調べてみると、Python の print 関数は出力先を判断していることがわかりました。出力先が Shell であればすぐに出力されますが、そうでなければ一度 Buffer に溜めておき、バッファがいっぱいになってからまとめて出力されます。つまり Python を tee と組み合わせて使うと、このバッファの問題にぶつかり、期待した出力がすぐには画面にもファイルにも現れないのです。&lt;/p&gt;</description></item><item><title>Python で日時の連続系列を生成する</title><link>https://coder.tw/ja/posts/python-generate-datetime-series/</link><pubDate>Sun, 30 Jul 2017 02:30:16 +0000</pubDate><guid>https://coder.tw/ja/posts/python-generate-datetime-series/</guid><description>&lt;p&gt;Excel では、ドラッグするだけで連続した日付を簡単に生成できます。Python でも、datetime と timedelta という二つのモジュールを使えば、同じようなことができます。1時間おき、1日おき、1か月おきなど、どの間隔でも可能です。&lt;/p&gt;</description></item><item><title>Python 3 で Windows のコマンドプロンプトに出力すると CP950 エラーになる</title><link>https://coder.tw/ja/posts/python-cp950-encoding-error-windows-console/</link><pubDate>Tue, 21 Feb 2017 23:59:09 +0000</pubDate><guid>https://coder.tw/ja/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 が原因なわけでもないですし……。&lt;/p&gt;</description></item><item><title>ループの中でリストの要素を削除してはいけない</title><link>https://coder.tw/ja/posts/python-dont-delete-list-in-loop/</link><pubDate>Thu, 12 Jan 2017 20:35:34 +0000</pubDate><guid>https://coder.tw/ja/posts/python-dont-delete-list-in-loop/</guid><description>&lt;p&gt;「何度踏んでも懲りない愚かな行為」を、また繰り返してしまいました。間違った書き方も一度経験すれば身につくはずだと思っていたのですが、今日も会社で3時間も地雷を踏んでしまいました。どこに問題があるのかさっぱりわからず、最後にあらためてコードを丁寧に読み直したところ……また同じ問題でした。一言でまとめると、「ループの中で配列の要素を削除してはいけない」です。&lt;/p&gt;</description></item><item><title>Python でグローバル例外ハンドラーを設定する</title><link>https://coder.tw/ja/posts/python-global-exception-handler/</link><pubDate>Mon, 02 Jan 2017 15:00:12 +0000</pubDate><guid>https://coder.tw/ja/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>https://coder.tw/ja/posts/python-join-with-lambda/</link><pubDate>Tue, 13 Dec 2016 16:05:52 +0000</pubDate><guid>https://coder.tw/ja/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 関数を join に渡せないかと考えたこともあるはずです！</description></item><item><title>Python で漢語ピンインを処理する（氏名・住所の中国語→英語変換）</title><link>https://coder.tw/ja/posts/python-chinese-to-pinyin-conversion/</link><pubDate>Fri, 09 Dec 2016 00:05:43 +0000</pubDate><guid>https://coder.tw/ja/posts/python-chinese-to-pinyin-conversion/</guid><description>&lt;p&gt;今日は同僚の手伝いで、大量の氏名と住所を中国語から英語に変換する必要が出てきたので、Python で漢語ピンインをどう扱えばよいかを調べてみました。まさか、一件ずつ郵便局のフォームやウェブサイトにコピーしていくわけにもいきませんからね（笑）。結果は意外なほど簡単でした。住所の翻訳は各社の Geocoder API で処理でき、漢語ピンインはサードパーティのライブラリを使えます。翻訳の精度もなかなか良好です。完璧とは言えませんが、人の手による「工人智慧」（「人工智慧」（AI）のもじり）と組み合わせれば、小さな欠点は十分にカバーできます。最後の小さな欠点を解消するには、膨大なリソースと技術を投入し、機械学習の手法を導入する必要があるでしょう。（実はいつか試してみたいと思っています。中国語圏では使える便利なツールが本当に少ないですから。）&lt;/p&gt;</description></item><item><title>elasticsearch.py を高速化する方法（バルク操作）</title><link>https://coder.tw/ja/posts/how-to-make-elasticsearch-py-fast-bulk-operate/</link><pubDate>Thu, 08 Dec 2016 00:57:01 +0000</pubDate><guid>https://coder.tw/ja/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 は実行時間で課金されるため、Lambda 関数を書くときは秒単位で気を遣います。0.5 秒を超えるたびに頭を抱えていました。そこで、最初は .index で1件ずつ挿入し、次に streaming_bulk を使い、最後はどうにも我慢できず parallel_bulk と streaming_bulk を組み合わせました。ここでは、これらの方法の違いと踏んだ落とし穴についてお話しします！&lt;/p&gt;</description></item><item><title>Python で文字列を真偽値（bool）に変換する</title><link>https://coder.tw/ja/posts/python-convert-string-to-boolean/</link><pubDate>Thu, 08 Dec 2016 00:18:21 +0000</pubDate><guid>https://coder.tw/ja/posts/python-convert-string-to-boolean/</guid><description>&lt;p&gt;今日、AWS Lambda を書いていたところ、環境変数から読み込んだ設定を条件判定に使うために、文字列を真偽値に変換する必要がありました。ふつうに考えると、Python が自動で変換してくれるか、&lt;code&gt;bool(&amp;quot;True&amp;quot;)&lt;/code&gt; で変換できると思いますよね。しかし、まず大事なことですが、Python は型の自動変換を行いません。エラーは潔く出すだけです。では &lt;code&gt;bool()&lt;/code&gt; を使えば問題ないと思いますよね？ ところが、これが地雷でした……。今日は30分もこの地雷に時間を取られてしまいました……&lt;/p&gt;</description></item><item><title>Python の GroupBy でデータをグループ化する方法（List+Dict）</title><link>https://coder.tw/ja/posts/how-to-use-python-groupby-data-listdict/</link><pubDate>Wed, 07 Dec 2016 01:13:27 +0000</pubDate><guid>https://coder.tw/ja/posts/how-to-use-python-groupby-data-listdict/</guid><description>&lt;p&gt;Python でデータを扱うとき、ある Key で GroupBy（グループ化）するのはよくある作業です。たとえば Email Log を分析するときに、件名ごとの送信件数を知りたい場合や、件名ごとの Email Provider の上位5件を一覧にしたい場合などです。データベースがあれば、これは非常に簡単な作業です。しかし、データをデータベースに入れたくない場合はどうすればよいでしょうか。&lt;/p&gt;
&lt;p&gt;そうした場合、非常に強力なデータ処理ライブラリである Pandas がおすすめですが、実は Python 本体にも GroupBy が用意されています！&lt;/p&gt;</description></item><item><title>参加者として見たこと - PyCon Taiwan 2016</title><link>https://coder.tw/ja/posts/pycon-taiwan-2016-recap/</link><pubDate>Thu, 23 Jun 2016 15:09:56 +0000</pubDate><guid>https://coder.tw/ja/posts/pycon-taiwan-2016-recap/</guid><description>&lt;p&gt;PyCon Taiwan 2016 から、もうすぐ1か月が経ちました。今回は jserv さんのチケット贈呈企画のおかげで、台湾の Python 開発者による年に一度の大きなイベントに参加することができ、本当にありがたく思っています。イベントが終わってからずっと、このレポートをどの視点で書くか考えていました。これまで私は、コミュニティイベントではスタッフとして参加することが多かったのですが、今回の PyCon は参加者として来たので、参加者の視点から、今年の PyCon Taiwan で見た良い点と悪い点をまとめることにしました。良い点は他のカンファレンスでも参考になりますし、悪い点も改善のための教訓として役立ててほしいと思います。&lt;/p&gt;</description></item><item><title>uWSGI</title><link>https://coder.tw/ja/posts/uwsgi/</link><pubDate>Fri, 24 Jul 2015 19:17:45 +0000</pubDate><guid>https://coder.tw/ja/posts/uwsgi/</guid><description>&lt;h1&gt;はじめに&lt;/h1&gt;
uWSGI はプロトコルであり、同時にプログラムでもあります。
&lt;p&gt;なぜこれほど複雑なのでしょうか。まずはプログラムの話から始めましょう。uWSGI は、もともと Python で書かれた Web アプリケーションが Nginx や Apache などの Web サーバーと通信できるようにするために作られたプログラムです。uWSGI は独自の uwsgi 通信プロトコルを採用しています。また、cgi、fastcgi、socket などほかのプロトコルにも対応しているため、Python だけでなく PHP や Go などのプログラミング言語とも連携できます。&lt;/p&gt;</description></item><item><title>Linux に Python を手動でインストールし、yum が動かなくなる問題を避ける方法</title><link>https://coder.tw/ja/posts/linux-install-python-manually-keep-yum/</link><pubDate>Fri, 19 Aug 2011 08:00:45 +0000</pubDate><guid>https://coder.tw/ja/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>https://coder.tw/ja/posts/python-easy-install-tutorial/</link><pubDate>Sun, 01 May 2011 16:50:04 +0000</pubDate><guid>https://coder.tw/ja/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」というプログラムを紹介します。これを使うと、Python でのモジュールのインストールがずっと簡単になります。Linux の yum に近い使い方で、一行のコマンドでモジュールをインストールできます～ さらに easy_install では、いわゆる egg 形式のパッケージもインストールできます。&lt;/p&gt;
&lt;h2&gt;</description></item><item><title>【Python】Python の世界への第一歩：HelloWorld（文字の出力とコメントの書き方）</title><link>https://coder.tw/ja/posts/python-hello-world-first-step/</link><pubDate>Sun, 20 Feb 2011 09:00:54 +0000</pubDate><guid>https://coder.tw/ja/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>https://coder.tw/ja/posts/python-interpreter-install-tutorial/</link><pubDate>Fri, 18 Feb 2011 22:01:26 +0000</pubDate><guid>https://coder.tw/ja/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>