aws apiをcallする時はkwargsを使う
- Tue
- 22:39
- python
aws apiをcallしているサンプルをネット調べるとif ~ else ~ で関数本体を切り分けてるものがあります。
方法としてはあまり良くないので実際には公式のBoto3 documentationにあるようにkwargsを使うようにします。
具体的には、複数件の結果を取得するlistやgetなんかでnexttoken(次ページみたいなもの)がある場合。
コードとしては分かりやすい。
list_rolesは、Markerを使用。
「python 可変長引数」等で検索するといろいろ出てくる。
方法としてはあまり良くないので実際には公式のBoto3 documentationにあるようにkwargsを使うようにします。
具体的には、複数件の結果を取得するlistやgetなんかでnexttoken(次ページみたいなもの)がある場合。
ネットでよくある例
https://qiita.com/chii-08/items/8912a312e83666912809コードとしては分かりやすい。
if next_token is not None and next_token != '': response = client.describe_log_groups( limit=50, nextToken=next_token ) else: response = client.describe_log_groups(limit=50)
kwargsを使う例
次ページ取得は、APIによってNextTokenやMarkerの場合など異なるのでややこしい。list_rolesは、Markerを使用。
kwargs = {"PathPrefix": "/"} if marker: kwargs["Marker"] = marker roles = client.list_roles(**kwargs)
「python 可変長引数」等で検索するといろいろ出てくる。
Jupyter notebook on VSCodeでAthenaに接続
- Thu
- 19:30
- python
本職はアナリストではないでのすが、たまにJupyter notebookを使う場合、notebook自体のエディターは使いにくいのでVisual studio Codeでなんとかならないかと思ったら出来たのでメモ。
ついでにAWS Athenaへクエリーを投げる。やり方はいろいろありましたが、awswranglerを使うと簡単だったのでこれを利用。
awslabs/aws-data-wrangler - https://github.com/awslabs/aws-data-wrangler
Jupyter (ms-toolsai.jupyter Microsoft)
Python自体は3.8をインストールしています。もちろん、awswranglerもインストール。
やってることは簡単で、Athenaへクエリーを投げてその結果をpandasでplotしてるだけ。
サンプルのコード:
後は通常のnotebookと使い方は全く同じで実行ボタンを押すグラフを表示してくれます。便利。
ついでにAWS Athenaへクエリーを投げる。やり方はいろいろありましたが、awswranglerを使うと簡単だったのでこれを利用。
awslabs/aws-data-wrangler - https://github.com/awslabs/aws-data-wrangler
VSCodeにPython/JupyterのExtensionをインストール
Python (ms-python.python Microsoft)Jupyter (ms-toolsai.jupyter Microsoft)
Python自体は3.8をインストールしています。もちろん、awswranglerもインストール。

notebookファイルを作成
VSCodeでファイルを作成・保存する時に拡張子を「.ipynb」にすると自動でJupyter notebookのUIと同じものがVSCode上に表示されます。やってることは簡単で、Athenaへクエリーを投げてその結果をpandasでplotしてるだけ。
サンプルのコード:
import sys, os, array, time import awswrangler as wr import numpy as np import pandas as pd wg = 'primary' db = 'test' query = "SELECT ymd, count FROM test.tbl_test01" df = wr.athena.read_sql_query( query, database=db, workgroup=wg) df.plot(figsize=(5,2), kind='bar', legend=False, title="", x='ymd')
実行してみる
今回はAWSに接続しているので、$HOME/.aws/credentials を準備しておく。後は通常のnotebookと使い方は全く同じで実行ボタンを押すグラフを表示してくれます。便利。

Emacs 27.1のelpy設定
- Mon
- 14:20
- python
emacs install後にelpyの設定を忘れてしまうのでそのメモ。
M-x package-list-packages を行うと下記のようなエラーが出る場合、必要なtoolや設定がされていないのが原因。
Could not create connection to orgmode.org:443
gnutls-cliのコマンドが失敗している場合があるのでgnutlsをインストールする必要がある。
https://brew.sh/index_ja
M1 macbook air で試したが、関連するpkgは既にarm版があったので非常に楽。対応早すぎ。
これで、package-list-packages時に実行される「gnutls-cli --x509cafile /etc/ssl/cert.pem -p 443 rgmode.org’ --protocols ssl3...」が正常終了するようになる。
その後は、sudo pip3 install virtualenv flake8 等で、elpy-configに必要なものを入れる。
M-x package-list-packages を行うと下記のようなエラーが出る場合、必要なtoolや設定がされていないのが原因。
Could not create connection to orgmode.org:443
gnutls-cliのコマンドが失敗している場合があるのでgnutlsをインストールする必要がある。
まず、 .emacsにrepositoryを設定
(require 'package) (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t) (add-to-list 'package-archives '("melpa-stable" . "http://stable.melpa.org/packages/") t) (add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/") t) (add-to-list 'package-archives '("ELPA" . "http://tromey.com/elpa/") t)
gnutls をインストール
homebrewで入れるのでまずhomebrewをインストール。その後、gnutlsをインストール。https://brew.sh/index_ja
M1 macbook air で試したが、関連するpkgは既にarm版があったので非常に楽。対応早すぎ。
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" $ brew install gnutls
これで、package-list-packages時に実行される「gnutls-cli --x509cafile /etc/ssl/cert.pem -p 443 rgmode.org’ --protocols ssl3...」が正常終了するようになる。
その後は、sudo pip3 install virtualenv flake8 等で、elpy-configに必要なものを入れる。
pythonでsjisファイルutf8に変換しようとして
- Sun
- 00:24
- python
pythonでsjisファイル(csv)をutf8変換しようとして迷った時のメモ。
openする時に、encodingを指定すれば開けるのですが、例えばこんな感じ
で、エラーが出る場合は、別のコードを指定。
ただし、これでもエラーになる場合がある。で結局、iconvでutf8に変換してからpythonで開くとうまくいった。
みたいな感じで。nkfやdos2unixよりもiconvの方が変換できる文字が多いようで。
また、変換できないときの挙動も異常終了したりしないでの、iconvがお勧め。
これらのツールで、改行コードの変換もできるが、末尾の変換だけで、マルチラインカラム(1つのフィールドに改行コードが入ってるもの)の改行コードは変換してくれない。
なので、iconvで変換後、pythonのcsv.readerなどで読み込んでフィールド内の改行コードなどを削除。
openする時に、encodingを指定すれば開けるのですが、例えばこんな感じ
fin = open('sjis_file.txt', mode='r', encoding='shift_jis')
で、エラーが出る場合は、別のコードを指定。
fin = open('sjis_file.txt', mode='r', encoding='shift_jisx0213')とか。
ただし、これでもエラーになる場合がある。で結局、iconvでutf8に変換してからpythonで開くとうまくいった。
#!/bin/bash iconv -c -f SJIS -t UTF-8 sjis_file.txt > utf8_file.txt python read_file.py
みたいな感じで。nkfやdos2unixよりもiconvの方が変換できる文字が多いようで。
また、変換できないときの挙動も異常終了したりしないでの、iconvがお勧め。
これらのツールで、改行コードの変換もできるが、末尾の変換だけで、マルチラインカラム(1つのフィールドに改行コードが入ってるもの)の改行コードは変換してくれない。
なので、iconvで変換後、pythonのcsv.readerなどで読み込んでフィールド内の改行コードなどを削除。
emacsでpython、事始
- Thu
- 00:19
- python
久々にemacsでpythonをガリガリ書く必要が出てきたのでその設定。
emcas自体も26.1が出てたのでconfigure&make!
Elpy - Introduction を読み読み。
で、久々にやったせいか変なとこでハマる。
説明の通りに.emacsにパッケージアーカイブのリポジトリを追加するが動かず。調べたところ例示してあるhttpsでは動かない様子。
正解は、http://stable.melpa.org/packages/。そう、そうれだけ。でも気づくまでに随分時間かかった。。。
後は、いつもの設定もろもろ書いて、ついでにztreeでIDEっぽくして。
疲れたのでその設定はおいおい書こう。
emcas自体も26.1が出てたのでconfigure&make!
Elpy - Introduction を読み読み。
で、久々にやったせいか変なとこでハマる。
説明の通りに.emacsにパッケージアーカイブのリポジトリを追加するが動かず。調べたところ例示してあるhttpsでは動かない様子。
正解は、http://stable.melpa.org/packages/。そう、そうれだけ。でも気づくまでに随分時間かかった。。。
(add-to-list 'package-archives '("melpa-stable" . "http://stable.melpa.org/packages/"))
後は、いつもの設定もろもろ書いて、ついでにztreeでIDEっぽくして。
疲れたのでその設定はおいおい書こう。