文字列の数字をintなどの数値型に変換する方法を調べてみました。
連番のファイル名が付いた複数のファイルを一括処理するスクリプトを書いていて、n番目以降のファイルのみを処理したい場面に遭遇しました。ファイル名は文字列なので数値としての大小比較に難があります。もしかすると出来るのかもしれませんが、数値型に変換してから比較した方が好みです。
num_str = "00123"
num_int = int(num_str)
print("{0}は100以上".format(num_str), end="")
if (num_int >= 100):
print("である。")
else:
print("ではない。")
# 結果
# 00123は100以上である。
int()
関数でint型に変換しています。float型にした場合はfloat()
関数で変換出来るでしょう。
文字列に数字以外が含まれる場合は、数字のみになるように文字列を加工してあげます。
import os
import re
filepath = "h:/hoge/img001.jpg"
# ファイル名を取得
basename = os.path.basename(filepath)
print(basename)
# img001.jpg
# 正規表現で連続した数値を取得
#m = re.search(r'(\d+)', basename)
#num_str = m.group(1)
num_str = ''.join(re.findall(r'(\d+)', basename))
# 数値型へ変換
num_int = int(num_str)
print("No:{0}".format(num_int))
#No:1
サンプルではファイルのパスからファイル名に含まれる数字を抽出しています。
re.findall()
は正規表現でマッチする要素を配列で返してくれますので、''.join()
で区切り文字なしで連結して一つの文字列にしています。
拡張子に数字が含まれると都合が悪い場合は、os.path.splitext(os.path.basename())[0]
で拡張子なしのファイル名を取得するようにすると良いでしょう。
コメント