2020-01-01から1年間の記事一覧

ネスト深い可能性のある Map<String, Object> を探索する。

Map<String, Object> の値が更に、 Map<String, Object> になっていて深い木構造であったり、 List が存在したり、List で括られたMap<String, Object> があったりする場合に、 Key のパスでオブジェクトを参照するコードを書くのは辛い物がある。まず、頭に浮かべるべきコードは再帰呼出しをするメソッドで、</string,></string,></string,>…

ヘッダキーによるCSV読込み参照

Python でヘッダ行有りのCSVを読込んでいて、コンテンツ行の値をヘッダで記述された各々のキーで 参照したい場合がある。 pandas を使えば簡単かもしれないが、pandas を使わないケースで考えてみる。サンプルCSV:UTF-8 、BOM があるかもしれない。 A, B, C…

Python の zip関数でfor文中にインデックスをつける

for v in ~ を書いていて、forループ内で展開された値の他にループカウンタ orループインデックスが欲しい時がある。range() でリストの長さ len() と、リストを zip() でまとめれば良い。 alist = ['A','B','C'] for v,i in zip(alist, range(len(alist)))…

初心に帰って、lambda

Pythonで、以下のようなリストある時、 items = [{'name': 'A', 'type': 'string'}, {'name': 'B', 'type': 'int'}, {'name': 'C', 'type': 'bool'}] ここから、'name' キーの値を準備に並べて次のリストを求めたい。 ['A', 'B', 'C'] 初心者がすぐ書きそう…

Map<String, Object> へのデシリアライズ

gson の欠点として、以前から悩んでたのが、Map<String, Object> へのデシリアライズで、 数値が、Long 、Integer ではなく、Double に変換されるように認識してしまうことだった。 過去、 Google gson fromJson で、 Map<String, Object> への変換は落とし穴。。。 - Oboe吹きプログラマの黙</string,></string,>…

JSON文字列に日付時刻がある時、Python での datetime へのデシリアライズ

json の loads 実行時に、object_hoo= で、日付書式に従った datetime.strptime を実行するように するしか方法がないみたいだ。つまり状況によって、日付時刻フォーマットをに沿った変換処理ハンドラを指定するしかない。 # -*- coding: UTF-8 -*- from dat…

辞書ー>JSON における datetime

Python の json dumps() と dump() は、対象の辞書、Dictionary に、datetime を含んでると TypeError: Object of type 'datetime' is not JSON serializable でシリアライズできません。dumps の default= 属性で変換用のハンドラを指定して置換えないとな…

isinstance が良いのか、hasattr が良いのか?

興味深い議論を stackoverflow で見つけましたexception handling - python isinstance vs hasattr vs try/except: What is better? - Stack Overflow以外にも、try~except: を使う方が Python 言語として良いとされてます。 でもコード可読性、それから、…

ファイルの日付時刻を変更する

Python スクリプトでファイルの日付を変更するメモ os.utime で、ファイルのアクセス時刻と更新時刻を変更する。 作成時刻は、OS依存で Windows なら win32_setctime パッケージ # -*- coding: UTF-8 -*- import os import pathlib from datetime import d…

TimedRotatingFileHandler の勘違い

Python logging の TimedRotatingFileHandler の指定でうっかり間違った指定をしてしまいがち、when で指定する値に、'D' を指定しても、インターバルである 24時間経過しないと ローテーションされるわけないのである。MIDNIGHT を指定しないと想定の日替わ…

logging 時刻ローテーションファイル名の変更

Python の logging 、TimedRotatingFileHandler では、日替わりローテーションの場合、 ログファイル名=test.log に対して、 test.log.%Y-%m-%d がデフォルトのローテーションファイル名である。 これを test_%Y-%m-%d.log に変える方法は、、 handler の n…

OSの判定

Python ログ、標準の logging - Oboe吹きプログラマの黙示録 で書いた、 import sys from pathlib import Path sys.path.append('%s' % Path(__file__).parent.parent.resolve()) from blue.logger import Logger Windows は、PyCharmで実行時のスクリプトPA…

Python ログ、標準の logging

以前、 Python ログ出力 logging iniファイルを使用しない - Oboe吹きプログラマの黙示録 を書いたが、隣接のサブディレクトリから使用する場合、呼出し側をきちんとインポートしないと、 ValueError: attempted relative import beyond top-level package …

Java で JWT の利用

JSON Web Tokens - jwt.io を Java で利用する。 利用環境、pom.xml Maven <dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>3.11.0</version> </dependency> JWTの生成 // 有効期間 3分 int minutes = 3; // 秘密鍵 String secret = "123abc"; // 期間設定の為の計算 LocalDateTime nowtime = LocalDateTime.no…

日付のリスト

timedelta を使って作成する日付リスト from datetime import datetime, timedelta # 指定日から7日間のリスト dlist = [datetime.strptime('2020-10-28', '%Y-%m-%d') + timedelta(days=i) for i in range(7)] # 検証 list = [d.strftime('%Y-%m-%d') for …

re の flags

Python の標準正規表現操作 re で、 先頭:^ 末尾:$ を想定どおりに働かせる場合は、フラグ MULTILINE を指定する。 flags=re.MULTILINE例えば、末尾に、カンマ文字 ',' と数字、カンマと数字の間に空白がある可能性があるものを 除去したい時は、 res = re…

Python でCSVを読む時の注意

Python では、CSVを読む時、カンマ区切りの後に空白があると読込んだ後に列がズレたり、 (最終列の前のカンマの後に空白が存在して最終列がダブルクォートで括って改行が含まれていると、 次の行と一緒に列の認識が崩れる!) 想定しない障害になります…

subprocess.Popen で Java System.in にデータ渡す。

subprocess.Popen の communicate に文字列をセットして実行する Java Class の System.in に入力させてみる。 Java のクラス(実験用なので simple) package org.talking; import java.util.Arrays; import java.util.Scanner; import java.util.concurren…

JWT ペイロードを解析(JavaScript)

JavaScript で、JWT のペイロードだけを Base64 で解析 以下のようなメソッドで充分 function parseJwt (token) { var base64Url = token.split('.')[1]; var base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/'); var jsonPayload = decodeURICompon…

YAML から特定パスを指定した値の抽出

Spring や SpringBoot を使わない環境で、YAML からパスを指定した値の抽出です。 非Spring、非SpringBoot 環境で、YAMLを読む - Oboe吹きプログラマの黙示録 の応用です。 snakeyaml を使用します。 ・パスは "." 区切りで並べます。 ・配列の一部を抽出す…

snakeyaml で出力する先頭の !! について

snakeyaml で、オブジェクトからYAMLを作る - Oboe吹きプログラマの黙示録 で書いたとおり、snakeyaml がダンプする YAML は、 "!!" + 変換対象クラス名か、"!!yaml" が先頭についてしまいます。YAML書式ではコメントは、'#' で始めてコメント行にするはずで…

snakeyaml で、オブジェクトからYAMLを作る

非Spring、非SpringBoot 環境で、YAMLを読む - Oboe吹きプログラマの黙示録 を書いたので、今度はJava オブジェクトから、YAML テキストを snakeyaml で出力します。 Yaml yaml = new Yaml(); 基本、Yamlインスタンス作って、dumpメソッドで出力するのですが…

非Spring、非SpringBoot 環境で、YAMLを読む

Spring や SpringBoot を使わない環境で YAML を読込むのにどうしようという課題で、 snakeyaml を使うのが簡単です。 ( SpringBoot も結局は、snakeyaml を使っているので、Spring起動時のあの重たい起動の一部で、YAML読込みで使用されているので 安心し…

JSON と YAML の変換をしてくれるところ

ちょっと JSON を書いていて、あるいは、 YAML 形式で書いていて、変換が必要なとき、 以下のサイトが便利www.json2yaml.com

リストからユニーク要素を抽出する

リストから重複要素を抽出する。 - Oboe吹きプログラマの黙示録 を書いたので、 自然に次は、リストからユニークな要素=重複していない要素を抽出したリストを Collector として生成するのは、以下になります。 public static <T> Collector<T, ?, List<T>> uniquedList(){ M</t,></t>…

リストから重複要素を抽出する。

リスト、またはストリームから重複した要素だけを抽出してリストにしたい場合、 equals 、hashCode が正しく実装されていることが前提だが、 直感的かもしれないが、以下のように Collectors.groupingBy で取得できる。リストでもStreamを取得できるので、St…

equals メソッドと hashCode メソッドが override されたかを調べる。

あるクラスが、java.lang.Object の equals メソッドと hashCode メソッドを override して定義しているかを調べる。equals を override しているかを調べるメソッド public static boolean isEqualsOverride(Class cls){ try{ Method equalsMethod = cls.ge…

gradle の copy タスク活用

MyBatis を使用した開発プロジェクトで、gradle を使用した時にマッパーXMLを配置するのに、 不都合なことがある。Java の interface クラスを置いたJavaソースと同じ場所に、XMLを置いてビルドした時、 classpath にXMLも配置して欲しいのである。 例え…

SpringBoot HikariCP の コンフィグレーション

以下を書いたが、、 oboe2uran.hatenablog.comHikariCP を意識すると、、 import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import com.zaxxer.hikari.HikariDataSource; im…

SpringBoot mybatis の コンフィグレーション

今更、ではあるがメモ。 SpringBoot Ver 2.3.1 mybatis-spring-boot-starter は、Ver 2.1.3コードの読みやすさの為に、lombok を使うことにして、 build.gradle の設定は、、 dependencies { implementation 'org.springframework.boot:spring-boot-starter-…