名前に現在時刻を入れたファイルが連番かどうか判定(前半)


press
名前に現在時刻を入れたファイルが連番かどうか判定(前半)

名前に現在時刻を入れたファイルが連番かどうか判定(前半)

なにかアクションがあった際に生成されるファイル名に現在時刻が入ったファイルが、連番になっているかどうかを判別して連番になっていたらまとめてリスト化する方法です。手動では対応しきれない大量のファイルを処理する際のバッチ処理として活用できます。

コードはGitHubリポジトリにあげています。

開発環境

$ python -V
Python 3.7.0

$ tree
.
├── dir.txt
├── requirements.txt
└── sequeuce.py

コード

dir.txt

/Users/username/Desktop/img/*.jpg

ファイルが格納されているディレクトリを指定します。今回は例としてデスクトップのimgフォルダにあるjpg画像を指定しています。実際には環境に合わせたパスを指定してください。(*はワイルドカードで全てのjpgファイルを対象とする)

sequeuce.py

import datetime
import glob

f = open("dir.txt", "r")
files = sorted(glob.glob(f.read()))

split_file_name = ''
file_time_plus_one_seconds = ''

sequence_list = []

for file in files:
    split_name = file.split('-')

    file_time = datetime.datetime.strptime(split_name[2], '%Y%m%d%H%M%S')

    if not sequence_list:
        sequence_list.append(file)

    elif split_file_name == file_time or file_time_plus_one_seconds == file_time:
        sequence_list.append(file)

    else:
        print(sequence_list)

        sequence_list.clear()
        sequence_list.append(file)

    split_file_name = file_time
    file_time_plus_one_seconds = file_time + datetime.timedelta(seconds=1)

解説

import datetime
import glob
モジュールを読み込む

f = open("dir.txt", "r")
テキストファイルを読み込む

files = sorted(glob.glob(f.read()))
テキストファイルに書かれたパスを読み込む

split_file_name = ''
file_time_plus_one_seconds = ''
ファイル名を格納する変数を生成

sequence_list = []
連番ごとにファイルを格納するリストを生成

split_name = file.split('-')
今回はファイル名がXXX-XXX-000000000000-11.jpgの形式のため-で区切る

file_time = datetime.datetime.strptime(split_name[2], '%Y%m%d%H%M%S')
ファイル名の000000000000の部分は生成された現在時刻となっているので、-で区切り2つ目の現在時刻を文字列からdatetimeに変換してfile_timeに格納
'%Y%m%d%H%M%S'の形式を指定

elif split_file_name == file_time or file_time_plus_one_seconds == file_time:
ファイル名の11の部分はフレーム数となっているので、フレーム数だけが違う同じ時刻のファイル名が複数枚存在する場合があります。そのため同じ時刻もしくは1秒後の時刻かどうかを判定

sequence_list.clear()
リストを空にします

file_time_plus_one_seconds = file_time + datetime.timedelta(seconds=1)
ファイル名が連番かどうかを判定するために1秒足した時刻をfile_time_plus_one_secondsに格納


株式会社ファントムへのお問い合わせ

群馬県でPythonを使ったAIやソフトウェアを開発している株式会社ファントムが運営しています。




    Show Comments (0)

    Comments

    Related Articles

    Python

    PythonからDeepLのAPIを使って翻訳

    PythonからDeepLのAPIを使って翻訳 最先端のAI技術を使った世界最高レベルの機械翻訳のDeepLをAPIで操作します。deeplのライブラリを使うとPythonで書く通常のPOSTのコードよりも記述量を少なく […]

    Posted on by press
    Python

    Pythonのf文字列を使った書式パターン

    Pythonのf文字列を使った書式パターン この記事で紹介したf文字列を使った文字列の操作ですが、文字列に変数を埋め込む際に書式を指定できます。0埋めして文字数を揃えたり、カンマで桁を区切ることも可能です。 カンマで桁区 […]

    Posted on by press

    最新情報をお届けします!

    メーリングリストに登録するとファントムの最新情報をお届けします

    お客様のメールアドレスを共有することはありません