0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

添字付きファイルの並び替え(ソート)が出来ないときの対処方法

Last updated at Posted at 2020-04-29

こんにちはしろです

こういうファイルをソートしようと思ったときファイル内ではうまく並び替えれるのにPython などで処理をしようと思ったら。

このように予想した並びと違う順序になることがあります。。。

これに詰まったので自分用のメモとして書き残しておきます。

##対処法

添字の前に余分に0000をおくことです。これにより問題は解決できます。

しかし、名前すべて手作業で書き換えるのは面倒なのですべてPythonに任せてしまいましょう。

前提として、もとのファイルの添字を足す場合のみを考えます。

ex)img32.png  img00032.png

必要となる知識

  1. ファイル名の取得(osを使う)
  2. 名前から添字の取得(正規表現の使用)
  3. ファイルの名前変更(shutilの使用)

です。簡単なので1つずつ終わらして行きましょう。

1. ファイル名の取得(os)

ファイル名を取得するにはosというものを使います。

    import os
    file_dl = './File/'
    res = os.listdir(file_dl)

これだけでfile でしていたファイル内にあるものの名前がすべて取得出来ました。

2. 名前からの添字の取得(正規表現 re)

次は取得したファイル名から添字を取得しましょう。

    import re
    file_index = re.search(r'\d{1,}', 'img012.png').group()

ここでは正規表現と言うものをつかって数字だけを文字列から取得しています。

この場合だとimg012.pngから012だけが抜き出されfile_indexに格納されてます。

3ファイルの移動(shutil)

最後に名前を変更して保存するのですがそれにはshutil を使います。
やってることは名前を変更して元の場所に移動させているだけです。

    import shutil
    shutil.move(old_path,new_path)

こうすることでnew_path にold_pathにあったものが移動させることが出来ました。

まとめ

以上のことを連結させると

    import os
    import shutil
    import re
    
    file_dl = './File/'
    name = 'img_name'
    #ファイル内のフォルダ名を取得
    res = os.listdir(file_dl)
    
    #for文を用いて1つずつファイルを取り出す。
    for target_name in res:
        #ファイルのパスとファイル名を結合
        target_dl = file_dl + target_name
        #正規表現を用いて添字だけを取り出す
        target_index = int(re.search(r'\d{1,}', target_name).group())
        #新しいファイル名の作成
        target_new_name = name+str("{0:05d}".format(target_index))+'.png'
        #ファイルの名前を変更して保存し直し
        shutil.move(target_dl,file_dl+target_new_name)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?