mieki256's diary



2025/11/21(金) [n年前の日記]

#1 [golang] Go言語を勉強してたけどちょっと躊躇し始めた

Go言語(golang)を使って、Jpeg画像内のExif情報から撮影日を取得して、撮影日別にディレクトリを作ってそこに各ファイルを移動するツールを作れないかと色々勉強してたのだけど…。

こういうのはGo言語でやらなくてもいいのではないかと思えてきた…。Go言語の便利なところの一つとして、1ファイルの実行バイナリにできて配布が楽という点があるけれど、そもそも自分しか使わないツールだし、仮に配布したとしても機能に不満があって修正したいと思った時に他者が手を入れるのも面倒というか…。

Pythonでやってしまったほうがいいのではないかな…。どうせ自分しか使わないし…。後から何か修正したいと思った時もスクリプトソースを修正すれば即座に反映されるし…。

Pythonで書いてみた :

Go言語を使ってやろうとしてたことをPythonでやってみた。Go言語では半日かかっても実装できなかった処理が30分ぐらいで書けてしまった…。まあ、慣れてるというのが大きいけれど…。

_mvjpgbydate.py
"""
カレントディレクト内のjpeg画像のExifを読み取って、
日付別でディレクトリを作成してファイル移動するスクリプト。

Windows11 x64 25H2 + Python 3.10.10 64bit
"""

import glob
import os
from PIL import Image
from PIL.ExifTags import TAGS
import shutil


def get_jpeg_shooting_date(image_path: str) -> str:
    EXIFTAGS = ["DateTimeOriginal", "DateTimeDigitized", "DateTime"]

    exif_tag_map = {v: k for k, v in TAGS.items()}

    try:
        im = Image.open(image_path)
        exif_data = im._getexif()
        if exif_data is None:
            print(f"Not found Exif : {image_path}")
            return None

        for tagname in EXIFTAGS:
            tag_id = exif_tag_map.get(tagname)
            if tag_id in exif_data:
                return exif_data[tag_id]

        return None

    except FileNotFoundError:
        print(f"Not found '{image_path}'")
    except Exception as e:
        print(f"Error: {e}")

    return None


def get_jpeg_files() -> list:
    jpg_files = glob.glob("*.jpg")
    jpeg_files = glob.glob("*.jpeg")
    JPG_files = glob.glob("*.JPG")
    JPEG_files = glob.glob("*.JPEG")
    return list(set(jpg_files + jpeg_files + JPG_files + JPEG_files))


def make_dir(dirname: str):
    if os.path.isdir(dirname):
        # print(f"  Skip. Exist directory : {dirname}")
        pass
    else:
        print(f"Create directory '{dirname}'")
        try:
            os.mkdir(dirname)
        except FileExistsError as e:
            print(f"Error : Exist directory : {e}")
        except FileNotFoundError as e:
            print(f"Error : Directory not found : {e}")


def main():
    filelist = get_jpeg_files()

    if len(filelist) <= 0:
        print("Jpeg files not found.")
        return

    print(f"Jpeg {len(filelist)} files found.")
    for fn in filelist:
        datetime = get_jpeg_shooting_date(fn)
        if datetime is None:
            datetime = "Not found Exif"
            dirname = ""
        else:
            s = datetime.split(" ")[0]
            dirname = s.replace(":", "")
        print(f"Found '{fn}' ({datetime})")

        if dirname != "":
            # Create directory
            make_dir(dirname)

            newfn = os.path.join(dirname, fn)
            if os.path.exists(newfn):
                print(f"'{newfn}' already exists. Skipping.")
            else:
                # move file
                new_path = shutil.move(fn, dirname)
                print(f"Moved to '{new_path}'")


if __name__ == "__main__":
    main()

実行すると以下のような感じになる。
>python mvjpgbydate.py
Jpeg 4 files found.
Found 'P_20251115_112259.jpg' (2025:11:15 11:22:59)
Create directory '20251115'
Moved to '20251115\P_20251115_112259.jpg'
Found 'P_20251117_193010.jpg' (2025:11:17 19:30:09)
Create directory '20251117'
Moved to '20251117\P_20251117_193010.jpg'
Found 'P_20251113_130825.jpg' (2025:11:13 13:08:25)
Create directory '20251113'
Moved to '20251113\P_20251113_130825.jpg'
Found 'P_20251113_130817.jpg' (2025:11:13 13:08:16)
Moved to '20251113\P_20251113_130817.jpg'

今回は Google Gemini に色々尋ねながら書いた。Pillow で Exif を読み取れるとは知らなかった…。「2025:11:13 13:08:25」という表記を YYYYMMDD に変換するあたりもなるほどと…。いや、どれも誰かが書いてくれた記述がネット上のどこかにあるんだろうけど。

#2 [nitijyou] 簡易水洗トイレについて調べてた

昨日トイレ工事が終わって、簡易水洗トイレ(汲み取り式トイレ)の便器を交換できたけれど、ウォシュレットが ―― 温水洗浄便座がついてしまっているあたりが気になって関連ページをググって調べていた。

商品型番についてメモ :

交換後の便器の商品名は「トイレーナR」だろう…。渡された取扱説明書にもそう書いてあるし…。

_2025住宅設備機器総合カタログ A4版 | カタログビュー

オノヤさんの営業さんは「便座はセットになってる」と言ってたらしいけど、Webカタログ上では取り付け可能な便座の型番がいくつか列挙されている。

今回ついているのは、シャワートイレKBシリーズらしい。CW-KB32, CW-KB31 があるけれど、温風乾燥機能がついていない CW-KB31 のほうかなと…。一応、安い商品を選んではいるのね…。というか、簡易水洗なのにウォシュレット機能をつけた製品をメーカからして揃えてるんかい、という驚きも…。いやまあ、条件さえ満たしていればつけられるし、そういう需要もやっぱりあるのだろうけど…。

取り付け可能な便座の中で、ウォシュレット機能がついてない便座は存在しないのだろうか? と思ったけれどカタログ上ではちゃんとある。普通便座 CF-47AT、暖房便座 CF-18ASJ、脱臭暖房便座 CF-21ASJ。あるんだよなあ…。

お袋さんがオノヤさんの営業さんに、電話口で「ウォシュレットがついてない便座って無かったのですか?」と尋ねたところ、「探せばあるのかもしれませんが」という返事だったらしい。「探せば」ってどういうことだよ。メーカーのカタログ上で御丁寧に型番までキッチリと列挙されてるのに、一体どこを探すつもりなんだよ。いやまあ、店の在庫を探すとかそういうつもりで言ってるのかもしれんけど。

簡易水洗にウォシュレットはアリかナシか :

簡易水洗にウォシュレットをつけるのってアリなのかナシなのかが気になってググってみたけれど…。

_簡易水洗トイレで温水洗浄便座を使えますか? | よくいただくご質問 | 岡山市でトイレリフォームするなら | 株式会社アベルホーム - 岡山市密着で36年の住宅リフォーム専門会社
ご質問 : 簡易水洗トイレで温水洗浄便座を使えますか?

回答 : スグに便槽が一杯になってしまう可能性があるため、オススメできません

埋設してある便槽の容量、また、日常的に洗浄機能をお使いになるかどうかにもよりますが、洗浄に使った水は便槽に入ります。ですから、スグに便槽が一杯になってしまう可能性がありますので、オススメできません。

簡易水洗トイレで温水洗浄便座を使えますか? | よくいただくご質問 | 岡山市でトイレリフォームするなら | 株式会社アベルホーム - 岡山市密着で36年の住宅リフォーム専門会社 より


岡山県のリフォーム業者の方はこう言ってる。

少しでも高いものを売りつけたいと思ってるはずの業者の方が「オススメしない」と言ってるということは「まず無理やろ。お前は何を言ってるんだ」と言ってるも同然だったりするのではないのかなあと邪推しちゃうのだけど…。しかしオノヤさんは説明も無しにいきなりつけてきたのだよな…。


_汲み取りトイレにウオッシュレットを取り付けられますか - 教えて!住まいの先生 - Yahoo!不動産

色々な回答がついてるけれど「そんな事例は聞いたことない」「現実的ではない」と…。まあ、汲み取りトイレには、という話であって、簡易水洗はまた別なのかもしれないけれど、簡易水洗は汲み取り式トイレと同様に下のタンク(便槽と呼ぶらしい)に溜めていくわけで…。

温水洗浄便座について :

「ウォシュレットは使わなければいいだけやろ」「使わなければ今までと同じやろ」と自分は安易に思ってたけど。調べてみたら自動洗浄機能とやらで、ノズルからお湯を出さなくても器具を洗浄するために水が自動で出てしまうらしい。便座に座ったら後ろのあたりからモーター音がして何か水が出ていたのはそういうことだろうか…。

では電源を切っておけば、と思ったら便座の暖房機能までオフになってしまうので、座ってみると「ヒヤー!」に…。今まで暖房機能付きの便座を使ってたから、これはちょっと厳しい…。かといって布系の何かを乗せると親父さんが絶対に汚して大変なことになるから、そんなことはできないし…。

妹から言われて今頃気づいたけれど、脳梗塞で体の自由が利かなくなった親父さんがトイレで座ったり立ったりするために、トイレ工事が終わったら手すりの類を入れる予定になっていて…。しかしウォシュレットのパネルがあると、パネルが邪魔になって手すりを入れることができない…。

あればあったで便利な時もあるのかなとうっかり思い始めていたけれど、自動で水が流されるとか、電源を切ると暖房も無くなるとか、親父さんのための手すりが導入できなくなるとか…。これは設置したままにはできない感じになってきた…。

以上、1 日分です。

過去ログ表示

Prev - 2025/11 - Next
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project