singledispatchとjson.dumpが相性良いかも?

jsonのencodeエラーについては昔に書いたこの辺を見てもらうとして。 pythonでjson出力する際で対応していない型(e.g. datetime)の値を変換しながら出力したい - Qiita 今回の主題は、json.dumpsに渡すdefaultの関数としてfunctools.singledispatchが有用か…

jqfpyにchunkを追加した。直接batch requestを叩けるように(続く)。

github.com jqfpyにchunkを追加した。直接batch requestを叩けるように。ただまだ機能は不足しているような気がする。試しにelastic searchのbatch apiを叩いてみようと思ったけれど。まだ足りなそうな感じ(続く)。 欲しくなった理由 例えばテキトウなJSON…

JSON間の集合演算で面倒くさくなったのでpythonに丸投げした。できた。良かった。

github.com 集合演算を手軽にやりたかった。 以下のようなxs.jsonとys.jsonに対する集合演算をやってみたい。 $ echo '[1,2,3,4,5]' > xs.json $ echo '[2,4,6,8,10]' > ys.json 意外とコマンドライン引数に渡して、それに --slurp をつけてリストとして扱う…

jqfpyのgetを強化してみた([],*,*[])

github.com jqfpyのgetを強化してみた。具体的には、<attirubte>[],*,*[]という表記が増えた。 ショートカット用の機能が増えたので、学習コストは上がっていき(?)、当初の想定とは異なりどんどんjqに近づいていっているということがないわけではないのだけれど。 (当初</attirubte>…

jsからpythonに翻訳する過程で気づいた__new__の使いみち(追記:ダメだった)

github.com http://pod.hatenablog.com/entry/2017/09/14/020740気づいたのだけれど。 jsのちょっとした記述をpythonに直す時に、今まであまり使わなかった__new__()が使える箇所があるかもしれないと思った。 具体的な話 例えば、以下の様なコードがあると…

python-semver久しぶりに更新した

github.com 昔に作っていたnpmのsemverのforkを更新した(昔とは3年前のこと) そもそもひとつだけテストずっとコケていたとか、ciもなかったという感じだったので、travisの設定をするところからスタートだった。 結局何が違うのかといえば、どこかのタイミ…

jqfpyでyamlを実験的にサポートしてみた

github.com jqfpyでyamlを実験的にサポートしてみた。実験的という言葉がついている理由は完全にサポートしているというわけじゃないということ。 具体的には、連続したjsonに対応した入力をサポートしていない(後で詳しく)。 yaml対応版のインストール yaml…

数値の合計を取るのにJSONとみなせる

以下のような数値が行毎に出力されたファイルがあり。この合計を出す時に 00data.txt 1 2 3 4 5 6 7 8 9 10 (複数の列がある中でcutなどで合計を求めたい列だけを取り出してからのsumの場合もある) 以前までは真面目にpythonのワンライナーを書いていた。他…

jqfpyを使ってswagger spec中の$refを取り出す

github.com かんたんなjqの処理はjqfpyでどうにかなるということがわかったのでもう少し複雑な処理をしてみることにした。今度はswagger中の$refを抽出してみる。 このswagger中の$refを取り出すことは意外と大変な気がしている。 そもそもjqだけでやるのは…

jqfpyというコマンドを作りました。

github.com はじまり jqfpyというコマンドを作りました。作った理由は概ねこの記事に書いてあるとおりです。 むずかしさの段階 JSONを整形したいときには概ね以下の3段階くらいの状況があるきがします。 かんたんなのでワンライナーで十分 ちょっと複雑な記…

pythonでJSONが繋がっているようなファイルを読み込む方法。

json.loadsは使えない 例えば以下の様なデータが在る場合がある。 {"name": "foo"} {"name": "bar"} {"name": "boo"} 通常の方法ではinvalidなJSONなので読み込めない。 import json s = """ {"name": "foo"} {"name": "bar"} {"name": "boo"} """ print(jso…

jqの出力をパイプでつなげた時の挙動(slurpとunbuffered)について

about jq jqはjsonの整形に使われる。通常は以下のようなvalidなJSONを入力にする data.json { "name": "foo", "age": 20 } 整ったフォーマットで出力される。 $ cat data.json | jq . { "name": "foo", "age": 20 } diffなどを取る時には、-Sを使ってキーで…

pythonでサブクラスを定義するときにオプションを渡せるようにしてみる

そういえば、継承時にbase classの他にオプションを取る定義が書けるのわりと最初ビックリするけれどvalidなpythonのコード。 3.6なら__init_subclass__のフックを使うのが楽かもしれない。 たとえば、以下の様なコードを書いてみる。 自身を継承したクラス…

emacs上でmozcを使ったときにC-nとC-pで変換候補中の移動をできるようにする

emacs上での日本語入力にmozcを使うようにしてみた。macではなくlinux上での環境の話。 通常の設定では以下だけなのだけれど(mozcをビルド後に mozc_emacs_helper が使えるようにしないとだめ)。 (require 'mozc) (set-language-environment 'japanese) (set…

EIN(Emacs IPython Notebook)を試してみる

2つrepositoryがあり後者の方がmelpaで入るもの。どうやら後者は前者のforkらしい。 tkf/emacs-ipython-notebook: IPython notebook client in Emacs millejoh/emacs-ipython-notebook: Jupyter and IPython 2.x/3.x notebook client in Emacs install packa…

dictknifeのclickへの依存を無くした

dictknifeのclickへの依存を無くした。その過程で思ったことは記事にした。 不要なimportをlazyにしたい(ついでにちょっとしたsetupも呼びたい) - podhmo’s diary argparseでsubcommandを作るためのユーティリティ - podhmo’s diary まだpypiの方は更新して…

不要なimportをlazyにしたい(ついでにちょっとしたsetupも呼びたい)

不要なimportをlazyにしたい場合がある。例えばdictknife.loadではフォーマットとしてjson,yaml,tomlをサポートしているのだけれど。 jsonだけで十分の処理でyamlやtomlをimportを行いたくない。 ふつうのlazy import ふつうのlazy importとして関数の中でim…

argparseでsubcommandを作るためのユーティリティ

サブコマンドを作る時に何らかのライブラリに依存して良いならclickがオススメではあるけれど。 使いたくない場合もあったりする。そういう時にどうするとまだましになるかみたいな事を考えたりしていた。 argparseでのサブコマンド argparseでのサブコマン…

mongodbのsparse indexと `{$ne: null}` 的なquery

疎なfield(ほとんどがnullでごく少数のdocumentだけ値が入る)があったとして。 これに対するindexはsparse indexで十分じゃないかなと思っていたのだけれど。 試してみたらだめなqueryだったという話。 explainの見方 その前にexplainの見方をメモ db.<collection>.find(</collection>…

matplotlibで描画できるグラフがわからないので自分用のギャラリーを作っている

github.com matplotlibには色々なメソッドがいっぱい なんか色々あるけれど。どういうものがあるのか把握していない。分かっているのは以下2つだけの様な状況 plot hist たぶんそれ以外にも色々あるかんじ。 matplotlibの例は多すぎるし複雑過ぎる matplotl…

nbreversibleがreversibleになった

github.com nbreversibleがreversibleになった。 reversible? readmeより # convert .ipynb to .py $ python -m nbreversible foo.ipynb > foo.py # convert .py to .ipynb $ python -m nbreversible foo.py > foo.ipynb # re: convert .ipynb to .py $ pyth…

1つのpythonのソースコードからmarkdownやipynbを作るツールを作りはじめた(文芸的プログラミングっぽい感じ)

github.com jupyter notebookは便利なのだけれど。便利な点はcellがあることで。 一方で不便な点もあって。不便な点もまたcellがあることという感じ。 端的にいうとjupyterを立ち上げるのが面倒くさいのとcell間のコントロールを行き来するのが面倒くさい。 …

個人的なグラフ描画用のパッケージに機能を追加した

github.com 個人的なグラフ描画用のパッケージに機能を追加した。その前にこのutataneというパッケージが何をするものなのかを整理してみる気になった。 何をするものなのかというと、グラフを描く等に関する忌避感を緩和するためのもの。だるいと思う率を下…

pytestのyieldで指定するfixtureのやつを真似して実装してみた

github.com pythonのyieldで指定するfixtureのやつを真似して実装してみた。意外と簡単にできるし。面白いし。便利な気がする。 yield fixture? pytestのfixtureはsetup/teardownをgeneratorで定義できる。昔はyield_fixtureという名前だったけれど。現在はf…

pytestのfixtureとcontextlib.contextmanagerでの例外の取り扱い方の違い

前回の記事でpytestのfixtureでもteardownが実行されることを確実にするにはtry-finallyで囲む必要があるという風に書いてしまっていた。 特にtestでの利用を想定して作ったわけではないけれど。test時のsetup/teardownのことを考えると、途中のコードが失敗…

個人的なグラフ描画用のパッケージ作りはじめた

github.com 個人的なグラフ描画用のパッケージ作りはじめた。matplotlibのラッパーの様なもの。 元々のモチベーションは以下の記事に書いてある。 グラフ描く簡単な環境作っときたいかも 結局グラフの表示用のコードとグラフを画像として出力する用のコード…

pythonのastモジュールに不満がでたらlib2to3のコードを使ってみよう

はじめに pythonのコードをparseするためにastモジュールが用意されていたりする。 このモジュールはpythonのコードをparseしてvisitor的なものでastをtravarseしてなどと便利ではあるのだけれど。 コメントなどの情報が消えてしまうなどの不満が出ることが…

たくさんのnotebookの内容をコマンドラインから再実行して更新したい

はじめに たとえばグラフを描画するnotebookをたくさん開いている状態。 ちょっとだけimportしたライブラリに変更があったので実行結果が変わりそうになってしまった。 このようなときに、すべてのipynbファイルを開いてrunallした後にsaveというようなこと…

グラフ描く簡単な環境作っときたいかも

グラフ描くの簡単な環境作っときたいかも。要求は以下の2つ。 手軽にグラフが描ける 手軽にグラフを共有できる 前者は例えばjupyter上でだけ表示みたいなのが嫌な感じ。 後者は例えばGUIで表示とかだけなのは嫌な感じ。 まだ結局一番良いと思える方法は見つ…

sqlalchemyのORMじゃない方の機能(expression language api)

使い方忘れることが多いのでメモ。 準備 テキトウにデータを作って準備する。 テキトウにテーブル作成。 CREATE TABLE groups ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT ); CREATE TABLE users ( id INTEGER PRIMARY KEY AUTOINCREMENT, group_id …