Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

python

bottleでダウンロードリンクをつくる

今回の記事はbottleでダウンロードさせる方法についてです。 ローカルで生成した結果を読み込ませたり、webページに載せるにはちょっと分量が多くなりすぎる内容を掲載できますね。 実際のところ imageディレクトリにgopherくんの画像"gopher.png"を用意して…

bottleで静的な404ページ

bottleで静的な404ページを出す方法です 実際のところ 404ページのポンチ絵 htmlファイルとかでもいいのですが……デザインセンスなど一ビットもないのでポンチ絵で。 これを、imageフォルダにつっこみます。 スクリプト 最小限だとこんな感じ。 from bottle i…

Bottleで静的ファイルを表示する

Bottleで静的ファイルを表示する方法です。 固定のpdfファイルや画像ファイルを表示させる時なんかに使います。 ローカルのImageMagicで生成したファイルをブラウザに渡すときにも重宝しそうですね。 実際のところ imageディレクトリからgopherくんの固定フ…

python版sinatraな軽量WEBフレームワークbottle

bottleはsinatraな軽量WEBフレームワークです。 getメソッドの取扱いレベルまで小分けされているので、限界域まで軽く作ることができます。 導入 例の如く、pipで。依存パッケージは無いように設計されているみたいです。 $ pip install bottle依存がなく、…

commonprefixは共通部分を引っ張りだす

標準ライブラリosにくっついてるcommonprefixはパスの共通部分を抽出してくれる関数です。 実際のところ import os os.path.commonprefix(["/home/shuzo_kino/python", "/home/shuzo_kino/Downloads"]) #>> '/home/shuzo_kino/' 本来的な要素では無いのでし…

pythonで現在のディレクトリを知る

使い捨て便利アプリを作ってるとき、問題になったりする現在地。 pythonの標準ライブラリosなら、その辺り 実際のところ curdirは現在ディレクトリの相対パスを示す記号……"."を返すだけです。 import os os.path.curdir #>> '.' 現在のディレクトリの絶対パ…

標準ライブラリgetpathはパスワード入力画面を実装できる

getpathはパスワード入力を支援する標準ライブラリです。 Pythonはデフォでこんなもんが付いてるんですね……。 実際のところ 例のごとく、importするだけ。 関数はユーザ名を抑えるgetuserとパスワードを入力するgetpass。 import getpass getpass.getuser() …

urljoinでURL文字列の細工をする

urljoinはURL文字列を細工する関数です。 同一ドメイン上のページを行ったり来たりする用途なんかには向いてるかも知れませんね。公式リファレンスでは以下のように紹介されています。 “基底 URL”(base)と別のURL(url)を組み合わせて、完全な URL (“絶対 URL…

標準添付ライブラリ「urlparse」でURLのパースをする

標準添付ライブラリ「urlparse」でURLのパースをする 実際のところ このブログの前回の記事をパースする方法はこんな感じ from urllib.parse import urlparse url = "http://shuzo-kino.hateblo.jp/entry/2016/08/28/191704" result = urlparse(url) result …

python-twitterでbotフォロー用新アカウントに情報を流し込む

先月書いた記事の続きです。ようやく着手できました……。 shuzo-kino.hateblo.jp私はbotやニュース系を一つのリストに突っ込んで時間の有る時に流し見するような使い方をします。 実際のところ from __future__ import print_function import twitter twit_in…

イテレータを手動で回していく

Pythonでも、イテレータを手動で回していく事ができます。 実際のところ フツーにまわしていくだけなら、延々と組み込み関数next()をブン回していくだけ。 最後はStopIterationを吐いて停止。 val = (x for x in range(1,10)) next(val) #>> 1 next(val) #>>…

リスト内包表記なる魔界記法 その2:辞書型

shuzo-kino.hateblo.jp の続きです。 リスト内方表記で辞書型のデータを作る事もできます。 とはいえ、for節特有の癖から意図しない挙動をする可能性も。 実際のところ キーと値を通常の辞書型と同様の並びで実装できます。 {x:y+3 for x in "foobar" for y …

"Cannot fetch index base URL http://pypi.python.org/simple/"とか出たら……pipが古い可能性大

記事執筆時点において、pipの最新版はv8.1系です。 ところが、debian環境……例えば、Rasbianで $ sudo apt-get install python3-pipなどで導入したpipはv1.3系と凄まじく古いものが導入されます。 内部で参照している諸々は完全に時代遅れなので以下のコマン…

現在実行されているPythonのバージョンを調べる

Python2とPython3は一部致命的に挙動が異なるため、ちゃんと見てあげないとひどい目に遭う事があります。どちらの環境でも実行され得る場合、早めに分岐させておくのも手です。 実際のところ sysモジュールを導入すれば、バージョン情報を調べる事ができます…

リスト内包表記なる魔界記法 その1:配列型

リスト内包表記はforをデータ型の中でブン回して新しいリスト系データをつくる方法です。 今まで何となく使ってましたが、ちゃんと名前が付いてるんですね。 正規表現みたいなモンで最初は癖があっても慣れれば簡潔かつ高速に欲しいデータを記述できます。 …

標準組み込みのタプル型を使い方

タプル型は変更不能のデータ型です。 x = (1,2,3,'a') x[3] #>> 'a' 違った値をぶち込もうとすると、エラーを吐きます x[3] = 'b' #>> Traceback (most recent call last): #>> File "<stdin>", line 1, in <module> #>> TypeError: 'tuple' object does not support item a</module></stdin>…

forにelse節が入る

Pythonのfor文にはelse節があります。 公式ではこんな感じで説明されている。 for_stmt ::= "for" target_list "in" expression_list ":" suite ["else" ":" suite] 実際のところ for s in [1,2,3,range(1,4)][3]: print(s) else: print("fin\n") #>> 1 #>> …

forはiterableなものであれば要素でもブン回せる

forはiterableなものであれば要素でもブン回す事ができます。 公式には、以下のように記載されています。 for 文は、シーケンス (文字列、タプルまたはリスト) や、その他の反復可能なオブジェクト (iterable object) 内の要素に渡って反復処理を行うために…

書式指定ミニ言語を使ってString魔界に浸ってみる その2:辞書型を呼び出す

shuzo-kino.hateblo.jp で扱った書式指定ミニ言語の補足です。上の記法に加えて、辞書型の変数を扱う方法があります。 実際のところ 辞書型を呼び出すには、"**"とアスタリスクを二個並べる必要あり。 dic = {'bar': 'yeah', 'foo': 123} "Welcome {bar}. Yo…

range型に[:num]を適用すると、途中まで切り出す事ができる

知れば知るほど妙な挙動をするrange型。 今回は定義済みのrange型を切り貼りして使う方法を扱います。 実際のところ lists = range(3, 9, 2) ではここで、コロン記法を使ってみる事にしましょう。 すると……? lists[:0] #>> range(3, 3, 2) ……なにやら、末端…

空の多重配列をつくる

からの配列を作る際にも組み込み関数rangeが使えます。 実際のところ lists = [[] for i in range(4)] #>> [[], [], [], []] どれだけ意味があるか不明ですが、rangeの記法はそのままつかえます lists = [[] for i in range(1,10,2)] #>> [[], [], [], [], […

組み込み関数range

Pythonの組み込み関数rangeは開始地点からステップ数まで、色々設定できる便利関数です。 Rubyだと類似記法として以下の様なものがありますが……ステップまで一つの関数で面倒見てくれるのは一寸便利かも Array(1999..2006) 実際のところ まえの内容も以下の…

文字列をバイト列にする

x = "foo".encode() #>> b'foo' x.decode() #>> 'foo' 直接バイナリ列を定義する事も可能 x = b"bar" #>> b'bar' ascii文字以外をエンコードしようとすると、16進数の文字列になります。 扱いはasciiと同じ。 var = "ごりら".encode() #>> b'\xe3\x81\x94\…

Pythonのリスト型とコロン記法の奇妙な関係

Pythonのリスト型にはコロン記法という実に奇妙な記法があります。 今回はコレについて。 実際のところ こんなデータがあったとします。 list(range(10)) # => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 全部表示 l[::] # => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 二番目か…

crontabをつかってRaspiカメラから画像をメール経由で取得する

crontabをつかってRaspiカメラから画像をメール経由で取得する方法です。 実際のところ ケースとして、「8時〜18時まで一時間毎にカメラ画像を取りメールで送信」を想定します。まずはホームに移動して、タスク用ディレクトリを作成 $ cd ~/ $ mkdir scri…

Raspi用カメラに合わせた自前首振りカメラをつくる

専用カメラとかいうブルジョワ的な箱が売ってますが、あえて自前で作ってみようかと 実際のところ 必要なもの 今回使ったのは以下の通り RasPi3 RasPi公式外箱(黒) RasPi専用カメラ ジャンパ線(オス-メス)×3 サーボ:RB-90 微型RCサーボRB90出版社/メー…

PiCameraとwiringpiの組み合わせでやっつけデジカメをつくる

今回の記事では以下の組み合わせを使ってやっつけデジカメを作ります。 Python3 Raspberry Pi 3 & RasPiCamモジュール PiCamera wiringpi(Raspberry PiのGPIO周りをよろしく扱う) 実際のところ まずはwiringpi自体を導入 $ sudo apt-get install wiringpi次…

組み込み関数len()は文字列もリストも評価できる

pythonの奇っ怪な実装の一つ、組み込み関数len()は文字列もリストも評価できます。 オブジェクト自体には長さを返す関数は無いみたいで、全部コイツを経由する羽目になります。 実際のところ 文字列も len("13") #>> 2 リストも len([1,2,4]) #>> 3 疑問 自…

pythonでprintfみたいな時間の文字列を生成する

pythonでprintfみたいな時間の文字列を生成する方法です。 strftimeライブラリを読みこめばいけます。 実際のところ "月_日_時刻_タイムゾーン"のフォーマットで出す方法は以下の通り。 from time import strftime strftime('%m-%d_%H:%M:%S_%Z') # '07-30_2…

PiCameraを使って、Python経由でRaspiカメラから静止画を取る

今回の記事ではPiCameraを使って、Python経由でRaspiのカメラモジュールを扱う方法を扱います。 実際のところ 単純な例 フィルタも受信待ちも欲しくない、単に撮りたいだけなら以下の内容で事足ります。 from picamera import PiCamera with PiCamera() as c…

pythonでメール送る その2:Gmail経由画像付き_危険編

前回の記事では、本文だけの簡単なメール送信を扱いました。 shuzo-kino.hateblo.jp今度はMIME形式をつかって画像を添付して送信する方法を考えます。 実際のところ # smtplib module send mail import sys import os import smtplib from email import enco…

pythonでメール送る その1:Gmail経由_危険編

Gmail + pythonでメール送る方法です。 今回は危険編。 二段階認証を敢えて停止して実施する侠気仕様。 今の私のように、とりあえず動かさないと気分が悪いなんて場合以外はちゃんとセキュリティを意識してやったほうがいいです。 実際のところ Gmailのセキ…

書式指定ミニ言語を使ってString魔界に浸ってみる

書式指定ミニ言語はPythonの文字列を整形する言語内言語です。 format関数と合わせて使います。 実際のところ printf記法みたいな事もできます。 import datetime d = datetime.datetime(2010, 7, 4, 12, 15, 58) '{:%Y-%m-%d %H:%M:%S}'.format(d) # '2010-…

PythonでJSONを扱う

WEB系の共通データフォーマットと化している感があるJSON。 Pythonでも、標準ライブラリとしてサポートしています。 実際のところ JSON基本の文字列化 dumpsを使えば一発。楽でいいですね。 json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}]) # '["foo",…

Pythonのコーディング規則の和訳版がある

ある程度なれたら、その言語のコーディング規則は極力見ておくと良いです。 日夜その言語の事ばかり考えているモホーク・チーフ達が練り上げた、”その言語らしさ”を垣間見ることができます。メジャー言語にして書面化を尊ぶ文化を持つPythonには、PEP8と呼ば…

Pythonのリスト型は最低一個のfor句さえあればif句も、追加のfor句も追加できる

今日も元気にPython中のRubyist、shuzoです。 これがpythonistaの日常なのかも知れませんが、メモ。 Pythonの公式ドキュメントで、インスタンスに対するメソッドのリストをだすこんな処理が書かれていました。 [d for d in dir([]) if '__' not in d] #>> ['…

pythonはじめるなら、可及的速やかに公式ドキュメントの「Python よくある質問」を見に行くべき

2013年のLotYで否定したPythonに手を付け始めました。 shuzo-kino.hateblo.jp理由はビジネス上差し迫った話ではなく……興味半分、将来投資半分といった感。さて、Pythonはドキュメント化を尊ぶ文化を持っており、特に公式にその傾向が顕著です。 有名ドコロで…

pythonでtwitterアカウントのリストからデータを拾ってくる

pythonにもtwitterを使うライブラリがあります。 実際のところ 導入はpipで。 $ pip install python-twitterでは、例として特定のリストでフォローしているメンバ名を出す動作を考えてみます。 from __future__ import print_function import twitter # twit…

【自習中】List comprehensionなるもの

List comprehension……包括リストとでも訳すべきなんでしょうか? リストからリストを作るといった内容……のようです。 distinct from the use of map and filter functions. なんて書かれるように、mapやらフィルタやらを適用するものとは、明確に区別される…

「docopt」を使えばgithubやherokuのCLIツールみたいなUIをドキュメント駆動開発で実装できる。

Julliaとか聞いたこともない珍しい言語もサポートdocopt/docopt.rb · GitHub と、Rubyも対応はしているのですが docopt has been confirmed to work with 1.8.7p370 and 1.9.3p194. If you have noticed it working (or not working) with an earlier versio…

pythonでchomp的な事をやりたいときは「rstrip」

Pythonのrstripメソッドは末尾の改行を消します。 RubyのString#chompですね。 for i in open('./example.yaml'): print(i.rstrip()) #foo: # bar: # - baz # - 3 一応、非破壊メソッドのようです >>> bar = "string\n\n" >>> bar 'string\n\n' >>> bar.rstr…

YAMLをコマンドでパースできるツール「yq」

ちょっと前に、JSONをパースしてくれる便利コマンド「jq」を紹介しました。CLI上でjsonパースをしてくれるjqを使えばワンライナーが不要となる - Bye Bye Moore今日散歩中にフと、あの発想でYAML版つくれないかな……と思い検索をかけたところ…… あ、ありまし…

公開したくない情報はdotenvにしまってしまう

...表に出したくない情報ってありますよね。 API鍵とかクレジットカード情報とかパスワードとかポエムとか。これらを環境変数を使って便利に扱うgemが"dotenv"です。 $ gem install dotenv普通にやると >> puts ENV['USER_NAME'] # => nil と、まぁ普通に格…

anyenvでスクリプト言語のバージョンを楽に管理する

anyenvを導入するとrbenv系のインタフェイスを統合して扱えます。 別々に突っ込むのも良いですが、anyenvに紐付けしておけば環境ファイルが複雑にならずに済みます。 想定環境 Mac OS X 10.8 Bash anyenv導入 ruby環境がある場合は 上記のスクリプトを $ rub…