potisanのプログラミングメモ

趣味のプログラマーがプログラミング関係で気になったことや調べたことをいつでも忘れられるようにメモするブログです。はてなブログ無料版なので記事の上の方はたぶん広告です。記事中にも広告挿入されるみたいです。

Python 3

Python 3.11でパッケージのグローバル変数やインポートを隠す

パッケージで使いまわしたいグローバル変数やインポートは__init__.pyと別ファイルの組み合わせで隠せます(見えにくくできます)。具体的には次の手順です。 パッケージ名のディレクトリと__init__.pyを作成する。 グローバル変数やインポートを使いたいス…

NumPy 1.23 配列作成ルーチンメモ

NumPy 1.23のAPIリファレンスには配列作成のセクションがあり、配列作成に関する関数が7個の分類に分けて紹介されています。ここではその分類に従い、各関数の概要と使用例を紹介します。 現状は公式リファレンスの一部意訳です。詳しい使い方は公式リファレ…

Python3 PEファイルの情報を取得するクラス

標準ライブラリのみ使用してPEファイルの情報を取得するクラスのコードです。現状ではインポート、エクスポート情報のみ対応しています。おそらくインポート情報を持たないファイルだとエラーが発生します。 #test.py from pefileinfo import * with PEFileI…

Python3 more-itertoolsのfirst/first_trueで条件に一致する最初の要素を取得する

Python 3にはmore-itertoolsという外部ライブラリがあり、itertools標準ライブラリでコードのみ紹介された関数やその他の便利な関数が提供されています。この記事はfirstとfirst_trueの紹介です。 more-itertoolsのfirstにジェネレーター式を指定すればC++の…

Python3 リストやタプルの作成はfor構文を[...]*n or 内包表記に変えると要素の型指定が省略できる

型指定してコードを書く場合、for構文でひとつひとつ要素を追加するよりも[...]*nや内包表記、ジェネレーター式+tuple()を使った方が要素の型指定も省略できます。 VSCodeでは次のコードでlist[int]やtuple[int, ...]などが推論されます。 #list1は型指定し…

Python 3&Pandas 1.4.4&SciPy 1.9.1 平均値・標準偏差・標本サイズを持つデータフレームに母平均の95%信頼区間を追加する

平均値・標準偏差・標本サイズを持つデータフレームに母分散既知・未知(標準分布とt分布)の母平均の95%信頼区間を追加するコードです。 from scipy import stats import pandas as pd df = pd.DataFrame({ "mean": (0, 1, 2, 3), "sd": (1, 10, 1, 10), "n…

Python 3&Pandas 1.4.4 データフレームは[]とloc[]でタプルによる列指定結果が違う

Pandas 1.4.4ではデータフレームの列名による列指定に[]とloc[]が使えますが、これらはタプルで列名を指定したときの動作が異なります。[]はタプルをひとつのキーとして扱い、loc[]はデータフレームの持つ列名により動作を変えます。前者はデータフレームが…

Python 3 tkinterでWhiteBrowserの簡単な操作を提供するGUIアプリケーション

2022/12/5更新:タグファイルの作成対応、WBDirInfoクラスの作成、設定ファイル及び一部変数名のアンダーライン削減。 動画管理ソフトWhiteBrowserの簡単な操作を提供するGUIアプリケーションです。Python標準ライブラリーtkinterモジュールの練習で作成して…

Python 3 tkinterのbind("<1>", ...)は左クリックでなく左ボタン降下

tkinterのbind("<1>", ...)あるいはbind("<Button-1>", ...)は左クリックではなく左ボタン降下です。この方法でコールバック関数からポップアップメニューを呼び出すとボタンの表示が降下状態のままになります。 左クリックを検出したい場合はButton(..., command=...)</button-1>…

Python 3 ctypesは関数のrestypeにctypes.HRESULTを指定すると自動でエラーを発生する

ctypesモジュールは関数のrestypeにctypes.HRESULTを指定すると戻り値がエラーの場合に自動でraiseするようです。エラーの発生時は手動で握りつぶそうとしていたのですが、可読性のためにctypes.c_intをctypes.HRESULTに変えたらOSErrorが発生するようになり…

Python&SciPy&matplotlib 2つの正規分布の交点を求めて垂線を描画する。

SciPyとmatplotlibの学習で書いたコードです。実行すると2つの正規分布の解(根)を求め、グラフに交点から横軸への垂線を描画します。根の存在を前提としてコードを簡略化しています。ここではscipy.optimize.root_scalarを使用しますが、sympyを使う方法も…

Python&SciPy&matplotlib 2つの正規分布の曲線と重複領域を描画する

SciPyとmatplotlibの学習で書いたコードです。実行するとパラメーターの異なる2つの正規分布とそれらの重複領域を描画します。 import numpy as np from scipy.stats import norm import matplotlib.pyplot as plt # 正規分布のPDF f1 = lambda x: norm.pdf(…

Python&SciPy&matplotlib 正規分布の曲線と下側・上側2.5%領域の塗りつぶし

SciPyとmatplotlibの学習で書いたコードです。実行すると標準正規分布と下側・上側2.5%領域を描画します。 import numpy as np from scipy.stats import norm import matplotlib.pyplot as plt # 正規分布で使う平均値と標準偏差 mean_sd = (0, 1) # グラフ…

Python 3 Windowsアニメーションカーソル(.ani)の情報を取得する

Windowsアニメーションカーソル(.ani)の情報を取得するサンプルコードです。 #rifffilereader.py from __future__ import annotations from io import FileIO from os import SEEK_SET, SEEK_CUR from typing import Tuple from dataclasses import datacl…

Python 3 WindowsアニメーションカーソルのRIFFヘッダー構造を解析する

Windowsアニメーションカーソル(.ani)のRIFFヘッダー構造を解析するサンプルコードです。実行するとシグネチャとチャンクのデータサイズ、RIFFまたはLISTの場合はフォーム/リストタイプを出力します。 RIFFファイルやaniファイルの構造はソース中コメント…

Python3 ディレクトリ内のファイル名をJSONへ出力する

ディレクトリ内のファイル名をJSONへ出力するサンプルコードです。pathlib、jsonを使用しています。 すべてのファイルを列挙する import json from pathlib import Path # ファイル名を取得するディレクトリのパス dir_path = Path(r"C:\Windows") # 作成す…

Python3 反復可能オブジェクトの正規表現と一致する部分を数える

Iterable(反復可能オブジェクト)の正規表現と一致する部分を数えるサンプルコードです。collections標準ライブラリのCounterクラスを使用しています。 import re from collections import Counter values = ("ab1111", "ab1112", "ac2111", "ac2112", "ad2…

Python3 反復可能オブジェクトから正規表現の一致部分が重複しない要素を1つずつ抜き出す

反復可能オブジェクト(Iterable)から正規表現の一致部分が重複しない要素を1つずつ抜き出すサンプルコードです。辞書型dictがキーと値のタプルで初期化でき、キーの重複する値を自動で上書きすることを利用しています。 import re #元から重複しないので…

Python 3 イテレーターを任意の個数複製する(itertools.tee)

あまり使わない関数ですが、標準ライブラリのitertools.tee関数を使うとあるイテレーターから任意の個数の独立したイテレーターを作成できます。イテレーターは要素の取得のみで取得位置を戻せませんが、この関数を使えばある位置のイテレーターを保存できま…

Python 3.8 基本的なデコレータサンプル集

2021/3/10:この記事は別のブログで投稿した記事を移動したものです。 Python 3.8用の基本的なデコレータのサンプル集です。デコレータのテスト用に作成したコード一覧でもあります。 関数をそのまま呼び出すデコレータ 関数の引数をある定数のみにするデコ…

Python 3.8 デコレータ(decorator)の基本的な動作

2021/3/10:この記事は別のブログで投稿した記事を移動したものです。 Python 3.8にはデコレータと呼ばれる機能があります。代表的なものは@staticmethodや@classmethodであり、@名前として関数やクラスの前に付けて使われます。 このデコレータ、実態は関数…

Python 3.4 Windowsクリップボード操作クラス

Python 3.4からAPIをがしがし呼び出してWindowsのクリップボードを操作するクラスです。tkinterを使った書き込みが出来なかったので勉強がてら作ってみました。ウィンドウ関係の関数は敢えて外してあります。 大雑把な更新履歴 ソースコード サンプルコード …

Python 3.8 チップス

2021/3/10:この記事は別のブログで投稿した記事を移動したものです。 Python3を触っていてエラーが発生したり調べたことのひたすらメモです。短いもの主体なのでチップスの名前を使っています。 arrayはリスト内包記法でリストに変換される ctypesにはmemmo…

Python 3.8 スライス関係の覚書

2021/3/10:この記事は別のブログで投稿した記事を移動したものです。 Python 3.8のスライス操作a[1:2:3]、スライスクラス<class 'slice'>、__getitem__メソッドに関する覚書きです。主な用語は公式ドキュメントの6.3.3. スライス表記 (slicing)、6.17. 演算子の優先順位、3</class>…

Python 3.4 RubyのDir.chdir(path) {...}様の処理

はじめに Python 3.4(3?)の__enter__、__exit__を使うとRubyのDir.chdir(path) {...}の様にブロックを抜けたらカレントディレクトリを元に戻す様な処理も簡単に書けます。また、contextlib.contextmanagerデコレーター(3.4リファレンス)を使うこともで…

Python 3.4 あるディレクトリに存在するファイルの名前からShift_JISで表現できない文字を削除する

あるディレクトリに存在するファイルの名前(UTF-16)からShift_JISで表現できない文字を削除します。実際にはファイル名をUTF-16で取得して、Shift_JISへ変換できない文字を「?」に置き換えつつShift_JISに変換して、またUTF-16に戻します。ファイル名の保…