[Python] 226 文字列に数字を含むかどうかの判定

文字列に数字を含むかどうかの条件分岐です。前記事コードの後半部分になります。

row[1]の値を1文字づつに分解してそれぞれ数字かどうかを判定し、1つでも数字が含まれていればTrueとするif文になります。

リスト内包表記のタプル版かと思ったのですが、タプル内包表記という用語があるんですね。

# row[1]の値に数字が含まれていればrow[0]と合わせてcsvファイルに書き込む
for row in csv.reader(f1):
    if any(chr.isdigit() for chr in row[1]):
        writer.writerow([row[0],row[1].replace('\u3000','')])

[Python] 225 ファイル作成日時の取得

ファイルのメタデータから作成日時を取得するコードを書きました。以前画像データ処理に関する記事でも取り上げています。

st_birthtimeはmacOSを含むUNIX系限定の機能です。

import glob,csv,datetime,pathlib

# 2017年から2019年のhorseファイルから仮馬名(誕生年を含む名前)を抽出する
for year in range(2017,2020):
    for f in glob.glob(f'/horse_racing/horse/horse{year}.csv'):

        # ファイルのメタデータから作成日時を取得
        p = pathlib.Path(f)
        dt = datetime.datetime.fromtimestamp(p.stat().st_birthtime)
        dt_str = dt.strftime('%y%m%d%H%M')

        # 新ファイルの先頭に元ファイルの作成日時を付ける
        file_new = f'/horse_racing/test/{dt_str}_horse{year}_check.csv'

        # 馬名に数字を含む場合、horseIDと仮馬名を抽出してCSVファイルを作成する
        with open (f, mode="r", encoding="shift_jis") as f1:
            with open(file_new, mode="w", encoding="shift_jis") as f2:
                writer = csv.writer(f2)

                writer.writerow(['horseID','仮馬名'])
                for row in csv.reader(f1):
                    if any(chr.isdigit() for chr in row[1]):
                        writer.writerow([row[0],row[1].replace('\u3000','')])