ablog

不器用で落着きのない技術者のメモ

Python

macOS Ventura 13.5.2 に Python をインストールしようとすると ModuleNotFoundError: No module named '_lzma' と怒られる

事象 macOS Ventura 13.5.2 に Python をインストールしようとすると ModuleNotFoundError: No module named '_lzma' と怒られる。 % pyenv install 3.11.6 python-build: use readline from homebrew Downloading Python-3.11.6.tar.xz... -> https://www.p…

pandas で df[df[列番号]==数値] と df[df[列番号].isin([数値])] のどちらが速いか(数値編)

サマリー 14MBの CSV ファイルを読んで 1,000 回 df[df[列番号]==数値] または df[df[列番号].isin([数値])] の実行時間を計測すると、isin のほうが 0.875s(=3.131s-2.256s)遅い結果になった。cProfile でプロファイリングすると df[df[列番号]==数値] の…

pyenv をインストールしようとすると "No module named '_lzma'" と怒られる

事象 Amazon Linux 2023 に pyenv をインストールしようとすると "No module named '_lzma'" と怒られる。 $ pyenv install 3.11.5 Downloading Python-3.11.5.tar.xz... -> https://www.python.org/ftp/python/3.11.5/Python-3.11.5.tar.xz Installing Pyth…

pyenv を install したけど python not found と怒られる

事象 pyenv をインストールしたけど、python が見つからないと怒られる。 % pyenv versions system * 3.10.3 (set by /Users/yoheia/.pyenv/version) % which python python not found 解決策 ~/.zshrc に eval "$(pyenv init --path)" を記述する export PY…

Python でタイムスタンプのタイムゾーンを変換する

Python でタイムスタンプのタイムゾーンを変換するコード例。例えば、CloudTrail のタイムゾーンを UTC から JST に変換するといった場合。以下のコードは AWS Lambda でも追加モジュール不要で実行可能。 コード import datetime import dateutil.parser de…

Jupyter Notebook の sparkmagic は matplotlib でグラフを描画できない

Jupyter Notebook の sparkmagic は matplotlib でグラフを描画できなかったので、DataFrame をファイルに出力して、conda_python3 で読んでグラフを描画した。 参考 Sparkmagic is a set of tools for interactively working with remote Spark clusters th…

Python で Web サイトにアクセスすると "HTTP Error 403: Forbidden" で怒られる

Python でとある Web サイトにアクセスすると "HTTP Error 403: Forbidden" で怒られたが、User-Agent をセットすると成功(HTTP ステータスコード 200)した。 事象 エラーメッセージ $ python http_download.py HTTP Error 403: Forbidden コード(http_do…

Python データ処理チートシート

Gropu By Multiple functions can also be applied at once. For instance, say we’d like to see how tip amount differs by day of the week - agg() allows you to pass a dictionary to your grouped DataFrame, indicating which functions to apply to…

pandas で csv_read すると "Unnamed: 1" といったカラムが追加される

事象 pandas で csv_read すると "Unnamed: 1" といったカラムが追加される 原因 よく見るとヘッダにタブが 2 つ入っていたので、1 つに修正したらお直った。 # hostname と date の間に 2 つタブが入っている hostname date timestamp kbmemfree kbmemused …

"UnboundLocalError: local variable 'x' referenced before assignment" エラー

Python で "UnboundLocalError: local variable 'x' referenced before assignment" エラーが出る場合の解決策。 事象 グローバル変数を関数内で使うと以下のエラーが出る。 UnboundLocalError: local variable 'record_cnt' referenced before assignment …

Python のソースから wheel ファイルにパッケージングする手順

Python のライブラリをソースから wheel ファイルにパッケージングする手順。 準備 wheel をインストールする。 $ pip install wheel パッケージングする ソースを入手する。 $ wget https://files.pythonhosted.org/packages/be/ed/5bbc91f03fa4c839c4c7360…

Redshift の接続ログを取得する Python スクリプト

コード redshift_get_connection_log.py #!/usr/bin/env python3 import os import csv import psycopg2 import datetime now = datetime.datetime.now() begin_time='{0:%Y-%m-%d %H:00:00}'.format(now - datetime.timedelta(hours=1)) end_time='{0:%Y-%m…

Pythonメモ

全般 パッケージリポジトリ: PyPI · The Python Package Index コード シェバン コード #!/usr/bin/env python3 参考 Pythonプログラムの先頭行の #! シバン(Shebang)について | ガンマソフト株式会社 Magic comment # -*- coding: utf-8 -*- 参考: Python…

Python で関数の戻り値でハンドリングする

コードサンプル def decrypt(decoded, plaintext): (中略) if len(entries) > 0: return entries else: return None (中略) def lambda_handler(event, context): (中略) data = decrypt(decoded, decrypt_result[u'Plaintext']) if data is not None:…

AttributeError: 'str' object has no attribute 'read'

事象 Aurora PostgreSQL互換のアクティビティストリームを Kinesis Firehose で S3 に出力し、Lambda で読んで JSOn コード def load_iter(text: str) -> Generator: size = len(text) decoder = JSONDecoder() index = 0 while index < size: obj, offset =…

Kinesis Firehose S3 に出力した JSON を Python でパースする

from json.decoder import WHITESPACE, JSONDecoder from typing import Generator def load_iter(text: str) -> Generator: size = len(text) decoder = JSONDecoder() index = 0 while index < size: obj, offset = decoder.raw_decode(text, index) yield…

GeoPy は 1.13.0 から geographiclib(C++) に依存している

GeoPy は 1.13.0 から geographiclib という C++ で書かれたライブラリに依存していると Changelog に書かれている。GitHub のソースを見ても、1.13.0 から setup.py に "INSTALL_REQUIRES = [ 'geographiclib=1.49', ]" が追加されている。 1.13.0 2018-04-…

AWS SDK for Python を使ってみる

boto3 をインストールする。 $ sudo pip install boto3 s3_ls.py import os import boto3 s3 = boto3.resource('s3') mybucket = s3.Bucket('az-test-datalake') for object in mybucket.objects.all(): print(object) 実行する $ python s3_ls.py s3.Object…

Flask で入力フォームのデータを POST で受け渡す

Flask で入力フォームのデータを POST で受け渡してみた。 メモ Flaskのデフォルトのテンプレートエンジンは jinja2 で HTML と Python のコードを同居させることができる。 テンプレートはアプリケーションルート配下の templtates ディレクトリ以下に置く…

psycopg2 で Pyhton から PostgreSQL に接続する

インストール $ sudo yum -y install gcc $ sudo yum -y install postgresql-contrib $ sudo yum -y install postgresql-devel $ sudo pip install psycopg2 $ sudo pip install psycopg2-binary サンプルコード psycopg2_sample.py import psycopg2 conn = …

Python の Web フレームワーク Flaskを使ってみる

Python の Web フレームワーク Flask を使ってみる Flask をインストールする $ pip install Flask ディレクトリを作成する mkdir flask cd flask Hello World プログラムを作る hello.py from flask import Flask app = Flask(__name__) @app.route('/') de…

Python スクリプトのデバッグ方法

Python 標準の pdb でデバッグする方法をメモ。 $ python -m pdb foo.py (Pdb) b 76 # ブレイクポイントを設定する (Pdb) c # ブレイクポイントまで実行する pudb など標準デバッガ以外にもいろいろあるらしい。 参考 PythonデバッグTips - Qiita Python で…

Python で CSV の列の値の型を類推する

準備 messytables をインストール $ pip install messytables テストデータ(test.csv)作成 aze,1,a,1 aze,2,b,2 aze,3,c,3 aze,4,d,4 aze,5,e,5 aze,6,f,6 aze,7,g,7 aze,8,h,8a aze,9,i,9 型類推スクリプト(csv_col_type_guesser.py)作成 #!/usr/bin/env py…

pyenv で Python のバージョンを切替えて使う

pyenv を使って複数のバージョンの Python をインストールして切替える方法をメモ。 pyenv とは 複数バージョンの Python をインストールしてコマンド一発で使うバージョンを切替えることができるツール。 pyenv lets you easily switch between multiple ve…

Python ではてなフォトライフの RSS をスクレイピングして最後に画像がアップされた時刻を取得する

はてなフォトライフの RSS をスクレイピングして最後に画像がアップされた時刻を取得する Python スクリプト。 RSS(yohei-a's fotolife) <item rdf:about="http://f.hatena.ne.jp/yohei-a/20161211091424"> ... <dc:date>2016-12-11T09:14:24+09:00</dc:date> ★これの最大値を取得する </item> <item rdf:about="http://f.hatena.ne.jp/yohei-a/20161211091423"> ... <dc:date>2016-1…</dc:date></item>

Python ではてなフォトライフの RSS をスクレイピングして画像をダウンロードする

はてなフォトライフの RSS をスクレイピングして、画像の URI を取得してダウンロードするする Python スクリプト。 RSS(yohei-a's fotolife) ... <item rdf:about="http://f.hatena.ne.jp/yohei-a/20161211091424"> ... <dc:date>2016-12-11T09:14:24+09:00</dc:date> <hatena:imageurl> http://cdn-ak.f.st-hatena.com/images/fotolife/y/yohei-a/20161211/20161</hatena:imageurl></item>…

IndentationError: unexpected indent

スペースや改行コードなどに要注意

easy_install と pip で Python のパッケージをインストールする on Cygwin

環境 Windows 7 Professional SP1 Cygwin $ uname -a CYGWIN_NT-6.1 ********-** 2.6.0(0.304/5/3) 2016-08-31 14:32 x86_64 Cygwin setuptools をインストールする Cygwin Installation の setup-x86_64.exe をダウンロードする。 setup-x86_64.exe を実行…