ワンライナーである必要なくない?
ちょくちょく、やりたくなるのでメモ。
例えば、カレントディレクトリのdocker-compose.yml
をjsonに変換する場合
python -c "import yaml; import json; print(json.dumps(yaml.load(open('docker-compose.yml').read()), indent=2))"
出力例
{
"version": "2",
"services": {
"swagger-editor": {
"image": "swaggerapi/swagger-editor",
"container_name": "swagger-editor",
"ports": [
"8088:8080"
]
}
}
}
以上
解説
基本的にPythonは改行で命令文の区切りを、インデントでブロックを表す言語です。
しかし、命令文の区切りにはセミコロンを使うこともできます。
yamlからjsonに変換するためには、yamlパッケージとjsonパッケージが必要なので、
これらはimportする文を書き、これらをセミコロンによって一行にまとめます。
import yaml; import json;
次に、ファイルをオープンし読み出し→yamlとしてロードしdictに変換→dictからjsonにダンプするコードを書きます。
json.dumps( # dictをjson文字列に変換
yaml.load( # yaml文字列をdictに変換
open('docker-compose.yml').read() # ファイルオープンし、読み出し
),
indent=2 # json文字列をインデントつきで出力
)
最後にこれをprintに入れて、標準出力に吐いています。