Python

2つのログファイルをマージする

2つのログファイルをマージするツールを Python で作りました。 【作った理由】 ・Windows にダウンロードしたりしたログファイルを簡単にドラッグアンドドロップの操作で ログ出力のログのタイムラインに沿ってマージしたい。 → パラメータで2個のログフ…

Json が同じかどうか判定する

2つのJsonの キーと値が同じであるか判定する。 Java なら、 Jackson ライブラリの JsonNode に変換して、equals メソッドで判定する。 ==演算子ではダメ!Python なら、 dict に変換して、==演算子で判定して良い。 import json dictA = json.loads('{…

重複させないリストのマージ(結合)

題目:2つのリスト、alist と blist alist に存在しない blist と合わせて結果 alist にする。(マージする) 結果はソートする。 結果は alist にする。 alist = [ 'a', 'c', 'b' ] blist = [ 'c', 'd', 'e', 'a' ] 単純にすぐに書いてしまう原始的なコー…

pytest Thread宣言のクラスをモックにする

対象クラス abusiness.py from threading import Thread class AThread(Thread): def run(self)->None: print("AThread!") # TODO 処理 AThread を実行するテストされるクラス some.py class Some: def exec(self)->None: a = AThread() a.start() a.join() …

Python での日本の祝日計算

昨日、Java の祝日計算プログラムが配布先を移動したりメンテナンスしたので、 ついでに Python 版もこれと一緒に公開することにしました。 Python での日本の祝日を抽出するものは、いろんなものが既に出回っているようですが、 計算で求めるようなものは少…

ネストしたリストの展開

入れ子状態のリストを1次元のリストに作りなおす。 例) list = [['A', 'B'], [], ['C', 'D'], ['E']] これを、['A', 'B', 'C', 'D', 'E'] にする list = [v for list_nest in list for v in list_nest] # ['A', 'B', 'C', 'D', 'E'] 辞書のリスト→1つの辞…

Python の日付時刻出力のメモ

日付時刻出力のメモを、あえて自分でメモしたくなった。何も考えないで。。 import datetime import re ndt = datetime.datetime.now() print(type(ndt)) # <class 'datetime.datetime'> print(ndt) # 2023-11-22 20:22:21.038937 strftime を使う。 ndt = datetime.datetime.now() prin</class>…

再考、Python のロギング

標準出力だけにログ出力することにして、もっとシンプルに書く。 ログフォーマットの種類の一覧のドキュメントが見つけにくいので、 ここに、リンクを→ https://docs.python.org/ja/3/library/logging.html以下、過去に書いたのは、浅はかだった。 Python ロ…

mock-Alchemy、pytest-sqlalchemy-mock を使わないでモックを作る(2)

mock-Alchemy、pytest-sqlalchemy-mock を使わないでモックを作る - Oboe吹きプログラマの黙示録 の第2弾です。 mock-alchemy や、pytest-sqlalchemy-mock を使わない。 もう少し複雑なパターンです。 SQL直接実行で、パラメータを複数指定するパターンです…

PythonにおけるJSON読込み時の日付時刻文字列を datetime に

Java だったら、Jackson 使用で、jackson-datatype-jsr310 ライブラリを使った デシリアライズを設定するだろう。 Jackson の 日付時刻の読込み - Oboe吹きプログラマの黙示録 jackson-datatype-jsr310 を使う - Oboe吹きプログラマの黙示録 Python の json.…

PyChram の pytest 設定

PyCharm の設定画面を開いて テストスクリプトを書いたら、実行設定は、 もちろん、pytest と pytest-mock がインストール済であることが前提

mock-Alchemy、pytest-sqlalchemy-mock を使わないでモックを作る

pytest-mock だけで頑張る方法今回目的の対象の検索クエリ'name'列を指定してSQLの結果から1行目の結果の 'color'列の値を取得するクエリ のメソッドがある。 class Sample: def queryColor(self, name:str)->str: sfactory = sessionmaker(autocommit=Fals…

SQLAlchemy 直接SQL、execute, from_statement サンプル

サンプル from sqlalchemy import create_engine, text from sqlalchemy.orm import Session, registry import sqlalchemy as db mapper_reg = registry() Base = mapper_reg.generate_base() class Sample(Base): __tablename__ = 'samples' id = db.Column…

SQLAlchemy query() の filter メモ

代表的な filter の書き方のサンプル・メモ (try~catch は省略) from sqlalchemy import create_engine, text from sqlalchemy.orm import Session, registry import sqlalchemy as db mapper_reg = registry() Base = mapper_reg.generate_base() class …

SQLAlchemy SELECT COUNT(T) の結果は scalar() で求める

with engine.begin() as connection: sql = 'SELECT COUNT(*) FROM samples' rows = connection.execute(text(sql)) count = list(rows)[0][0] こんな方法ではなく、scalar() を使う 例) from sqlalchemy import create_engine, text from sqlalchemy.orm i…

SQLAlchemy Session try~catch

簡単なサンプルで、、、 まずは、Session使用メソッドの呼び出し側で捕捉 from sqlalchemy import create_engine, text from sqlalchemy.orm import Session # 接続情報、username, password, host, port, dbname は設定済 engine = create_engine(f'postgre…

SQLAlchemy コネクション、セッション

以前、あまりにも内容が薄い安易なものをここに書いたので、もう少しまともなメモを 書こうと思った。create_engine from sqlalchemy import create_engine, text host = 'localhost' port = 5432 username = 'myuser' password = 'p1234' dbname = 'sampled…

2つのリストを処理

1つの方法→ zip()サンプル:split で生成した2つのリスト a = 'a,b,c,d' b = '1,2,3,4' for x, y in zip(a.split(','), b.split(',')): print('%s - %s' % (x, y)) print 結果 a - 1 b - 2 c - 3 d - 4tuple のリストにする。 c = [(x, y) for x, y in zip…

スレッド間のデータの受け渡し

Java ではなく Python の話です。 Thread生成時の引数にどういう転送用のオブジェクトを渡すか。。。 以下、サンプルです。 Queue を使う ThA.py # -*- coding: utf-8 -*- from threading import Thread import time import sys sys.path.append("../logtool…

ImportError エラーの解決

pyCharm で、Python を書いていて、実行前にエディタで警告のマークが出ないからと、 ついうっかり、 ImportError: attempted relative import with no known parent package となってしまうことがある。 カレントディレクトリにインポートしたいファイルを…

スレッド数のカウント

現在実行されているスレッドの数を調べるのは、 import threading threading.active_count()

Condition notify を使ったスレッドの制御

threading.Condition と、条件となる任意のオブジェクトをグローバル変数スコープにして 実現させます。 以下、サンプル # -*- coding: utf-8 -*- from threading import Thread, Condition import time # 生成格納先リスト products = [] # 条件オブジェク…

Python スレッドの戻り値

Python 戻り値ありのスレッドの方法というのをネット検索すると やたらと Future の使用を見かけます。 from concurrent.futures import ThreadPoolExecutor ThreadPoolExecutor の submit メソッド呼び出しで Future を受け取って Future の result メソッ…

Python Thread (初心者向けサンプル)

基本的な簡単なサンプルを書き留めておきます、Thread の説明 class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)group = ThreadGroupが将来実装された時の予約語で、None とすべき引数 target = 呼び出し可…

高階関数 functools.reduce のよくある使用方法

以前、高階関数 functools.reduce(function, sequence, initial=None) を使った リストの重複有無をチェックするを書いたけど、 oboe2uran.hatenablog.comもっと、一般的なやさしい使い方を書いておこう。collections の namedtuple で定義したリストから合…

Python での YAML と JSON の相互変換

https://pyyaml.org/ https://pypi.org/project/PyYAML/ を使う。 pip install pyyaml相互変換の媒介として辞書として扱うYAML → JSON sample.yaml title: サンプル item: - id: 10 name: Red value: - 111 - 222 - id: 20 name: Blue phone: - 333 - 444 sa…

重複などのチェック

Java で試したもの。 oboe2uran.hatenablog.comoboe2uran.hatenablog.comoboe2uran.hatenablog.comPython で試したもの。 oboe2uran.hatenablog.com

Flask Blueprint サンプル

2年前に書いた Flask の Blueprint サンプルは、ページ毎のフォルダに HTMLテンプレート, CSS, JSを配置するスタイルだった。 oboe2uran.hatenablog.comこんなんじゃなくて、HTMLテンプレート, CSS, JSは、1つのディレクトリに置いた方が良いか。。。 → sta…

SqlAlchemy クエリの簡単なサンプル

SqlAlchemy を使うなら、テーブルカラム構造のエンティティモデルObjectとの マッピングとしてクエリを書くのが教科書っぽい(スクエアな:square...)のであろう。。エンティティモデル定義を書かない方法 # -*- coding: utf-8 -*- import sqlalchemy as db…

Excelで作ったデータ表をDB(MySQL)に簡単な操作でセットするPythonのツール

Python で、Excelファイルを受け取り MySQL DBに簡単にデータをセットする。 PCで実行するので、用意する Python スクリプトは、pyinstaller で EXE化をする。 DB接続情報とシートにデータを書き込んだ Excel ファイルを ドラッグアンドドロップでPython …