python

pycommentというライブラリを作りました

github.com pycommentというライブラリを作くりました。 rubytoolsのxmpfilterに似たものをpythonでもやってみたいというやつです。 install installはいつもどおりpipで。 $ pip install pycomment how to use 使いかたはpycommentコマンドを使います。する…

datacalssesのインスタンスを含んだ値をJSONにするときのメモ

いつものやつです。対応していない値をjson.dumps()に与えるとTypeErrorが発生するやつです。 TypeError 例えばこういうdataclassを定義して。 from dataclasses import dataclass, asdict @dataclass class Point: x: int y: int json.dumpsするとTypeError…

pythonのprint()をlogger.infoに変える黒魔術(loggedpy)

github.com pythonのprint()をlogger.infoに変える黒魔術(loggedpy)を実装してみた(土日)。 発端はこのtweet。 printをそのままログに出せる方法あった気がするけどなんだっけ…気のせいかな…— altnight (@altnight) September 13, 2018 意外とやってみると…

pythonで複数のhttp requestを同時に投げる方法(requests)について

時折、ちょっとしたスピードアップにhttp(https) requestを並列で投げたい場合がある。aiohttpなどを使っても良いが既存のコードを書き換えるのもめんどくさい。そのようなときの方法のメモ。 concurrent.futuresを使う方法も考えられるけれど。今回はasynci…

CSVに色を付けてみるととても見やすいという話

twitterでCSVに色を付けてみるととても見やすいという話があった。実際どうなんだろうと思ったのでテキトウに色を付けて出力してみることにした。 たしかに見やすいかもしれない。 (CSVのサンプルはこの記事から拝借) code import typing as t import sys im…

color mapの一覧をheatmapで(160個くらい画像があるので注意)

from nbreversible import code import pandas as pd import numpy as np import seaborn as sns # %matplotlib inline xs = np.arange(1, 10) ys = np.arange(1, 10).reshape(9, 1) m = xs * ys df = pd.DataFrame(m) df .dataframe tbody tr th:only-of-ty…

dataframeの表示(htmlの表示)を試す

import numpy as np import pandas as pd %matplotlib inline m = np.arange(1, 10).reshape(3, 3) df = pd.DataFrame(m, columns=["a", "b", "c"]) df .dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical…

markdownで書かれたドキュメント(画像付き)を良い感じに扱うツールを作った

github.com markdownで書かれたドキュメント(画像付き)を良い感じに扱うツールを作った。名前は「書斎」から来ている。 ほしかった理由 ほしかった理由をまじめに書くと、ドキュメントにはフロー型のものとストック型のものがあり、現在の手元のツールでは…

pythonで改行をnormalizeする方法のメモ

APIはwindows向け、現状の環境はmac(ないしはlinux)みたいなことがあったりする。 こういうときには、str.split()ではダメ、os.linesepを使ってsplitしてもダメ。 素直にstr.splitlines()してos.linesepでjoinというのが良さそう。 def normalize_linesep_te…

dictknifeのmkdictでJSONを生成する時に不格好だけれど任意の配列も許すようにした

github.com 昨日のこの記事の続き。 JSONをコマンドラインから作るのが面倒だったのでそれ用のコマンドを作った - podhmo's diary 不格好だけれど、配列(pythonではlist)をサポートした。 name description xs/0/ xs[0] の意味 xs/-1/ xs[-1] の意味 xs// xs…

dictknifeのmkdictに変数を追加した

github.com 昨日のこの記事の続き。 JSONをコマンドラインから作るのが面倒だったのでそれ用のコマンドを作った - podhmo's diary 簡単な変数を使える機能を追加した。概ね以下のような感じ。 name description @ 変数に値を代入 & 変数の値を参照 例 obとい…

jqとls --colorの不思議とisatty

コマンド出力に色が着く ls --colorなどを実行すると文字に色が着く。こういうふうに。 これはjqも同じで普通にコマンドを実行すると色が着く。 pythonで これらはansi-color-code付きで出力されているので色が着く。pythonでやってみるとこういう感じ。 pri…

gcloudやgoogle-api-python-clientの使うcredentialsを見る

メモ。 gcloud sqliteにはいっているみたい $ file ~/.config/gcloud/credentials.db 2>&1| sed "s@$HOME@HOME@" HOME/.config/gcloud/credentials.db: SQLite 3.x database, last written using SQLite version 3024000 おもむろに取り出すと、access_token…

prestringの表現をASTから生成する機能を追加した

github.com 個人的にコード生成をするときにはprestringというパッケージをベースにして行うことが多い。テンプレートエンジンによるコード生成やASTを直接触る方法との差分は別の機会に書くとして今回追加しようとした機能についてまとめておく。 コード生…

pythonでescapeされた(?)文字列をunescape(?)する方法のメモ

時折変換の仕方などを忘れてしまい調べることなどがあるので。個人的なメモ。 JSONの文字列表現の文字列 JSONの文字列表現の文字列。なんて言えば良いんだろ?こういうやつ。 "{\"name\": \"foo\", \"age\": 20}" とりあえず、unicode-escapeを使ってどうに…

handofcatsでchoicesをサポートした

github.com handofcatsでchoicesをサポートした。NewTypeで作った型にchoicesというattributeを追加してあげる感じで使う(experimental)。 詳細 以下の様なコードが dump.py import sys import typing as t from handofcats import as_command def csv_dump(…

mypyのdmypyの実装のされ方を覗いてみた

mypyのdmypyの実装の仕方を把握する。知りたいことは裏側でのprocessの管理の仕方とクライアントとサーバー間のデータのやり取りの仕方。 準備 $ git clone --depth 1 git@github.com:python/mypy エントリーポイントの把握 インストールされるコマンドの確…

あとで調べる:mypyで分割代入でのエラーはtyping.Tupleなどの型のときしかみない?

以下のコードが通ってしまう。 import typing as t def f() -> t.Mapping: return {} def use() -> None: z = f() y, z = f() x, y, z = f() if __name__ == "__main__": import subprocess subprocess.check_call(["mypy", "--strict", __file__]) print("o…

mypyとTypedDictとtotalオプションについて

pythonでもdictに型を付けたいですね。一応TypedDictという型を定義したいという動きになっています。ちなみにまだこの機能はexperimentalになっているので。mypy_extensionsの方に入っています。 import mypy_extensions as mx class Pair(mx.TypedDict): l…

mypyのキーワード引数・デフォルト引数を持ったメソッドのプロトコルのメモ

デフォルト引数周りの型のことでちょっと把握できなかった部分があったのでメモ。 余分なデフォルト引数を持つ実装について 例えば、以下の様なプロトコルがあるとする。 import typing as t import typing_extensions as tx class Adder(tx.Protocol): def …

dictknifeのdiffに変更部分見比べられるような機能を追加した

github.com dictknifeのdiffに変更部分見比べられるような機能を追加した。ある意味昨日の以下の記事の続き。 dictknifeでmarkdownのテーブルの入出力に対応した - podhmo's diary 例えば以下の様な2つのJSONがあるとする 00.json { "name": "foo", "age": …

dictknifeでmarkdownのテーブルの入出力に対応した

github.com dictknifeでmarkdownのテーブルの入出力に対応した。欲しくなったので。概ねcsvと同様な形。 例 以下のようなJSONがあるとする。 data.json [ {"name": "foo", "age": 20}, {"name": "bar", "age": 21, "nickname": "B"}, {"name": "boo"} ] これ…

過去に作ったpythonの関数をコマンドとして扱えるようにするライブラリを更新しました

github.com 過去に作ったpythonの関数をコマンドとして扱えるようにするライブラリを更新しました。 なんでhandfcats? 猫の手も借りたいときに使いたかったからです。痒いところに手が届くという意味では、猫の手よりまごの手の方が近いのかもしれないですが…

pythonのargparseでのファイル入出力のちょっとだけ気になる点

pythonのargparseでのファイル入出力には、ちょっとだけ気になる点があります。これはそれらについてのメモです。 ファイル入力と標準入力を一緒に使う場合 以下のような形で入力を使いたい場合があると思います。 引数としてファイルを取る ファイルが渡さ…

wsgirefでhttp用のreverse proxyを書いてみる

goだとnet/http/httputilに便利なコードが置いてあるのだけれど。pythonだとそういうものがない。 なのでとりあえずwsgirefでどうするかを考えてみた(hip by hopなどは対応していない)。 挙動としては、requestされたら、テキトウなurlにrequestsで通信する…

コマンドライン引数によって、オプション引数が変わるコマンドの書き方のメモ(2 phase parse?)

コマンドライン引数によって、オプション引数が変わる? 例えば --fn というオプションを取り、このオプションが fのときとgのときとで引数が変わるようなもの --fn無し --fn f --fn g # --fn 無し $ python 03cli.py usage: 03cli.py [--verbose] [--name NA…

functools.partialの元を辿る

時折、functools.partialで作られた値の元の値(関数)を辿りたくなることがある。そのようなことをしたくなった場合のメモ。 単純に辿りたい場合 単純に辿りたい場合は.funcを見れば良い。ついでにクラスである場合もサポートしてあげると親切。 def find_ori…

argparseで--limitと--no-limitのような相互排他なオプションの定義の仕方のメモ

ドキュメントを見れば分かることだけれど、たまに忘れるので。 import argparse def parse(argv=None): parser = argparse.ArgumentParser() limit_group = parser.add_mutually_exclusive_group() limit_group.add_argument("--limit", dest="limit", type=…

mypyの可変長な引数と戻り値の型の書き方

可変長引数 import typing as t import mypy_extensions as mx def f0() -> t.List[int]: return [] def f1(x0: int) -> t.List[int]: return [x0] def f2(x0: int, x1: int) -> t.List[int]: return [x0, x1] def fN(*xs: int) -> t.List[int]: return list…

python-environment.elを使うのにvirtualenvを不要にする

python-environment.elというelispが、jediなどをemacsで使おうとした時に使われます (正確に言うと、emacs上でepc(emacs用のrpc) serverをつかったjediのinterfaceをインストールした際に使われる) 。 このpython-environment.elですが、python2.x系のこと…