特定の順序でファイルを処理する

特定の順序でファイルを処理する

私のフォルダには40,000枚の画像があります。ファイル名は次のパターンに従います。

1558058263_18ea873ddcf8c65e.jpg
1558408930_63c29ce4462ec194.jpg 
1558062887_18ea873ddcf8c65e.jpg

このファイル名の最初の部分はタイムスタンプで、2番目の部分は画像を生成したコンピュータIDです。

タイムスタンプだけに基づいて各ファイルを順次処理したいと思います。処理のためにファイルをインポートする方法。私はpython3を使ってファイルを選択しています。現在のコードは次のとおりです。

 for root, dirs, files in os.walk(path):
                for name in files:
                        img=fr.load_image_file('/home/ubuntu/faces/' + name)

答え1

sort()私にはor関数を使用できるようですsorted()スタックオーバーフロー):

# ...
for root, dirs, files in os.walk(path):
   files.sort()
   for name in files:
      print(name)

または

# ...
for root, dirs, files in os.walk(path):
   for name in sorted(files):
      print(name)

答え2

Lambdaを使ってソートを試すことができます(テストされていません)。

for root, dirs, files in os.walk(path):
    for name in sorted(files,  key=lambda x: int(re.search(r'\d+', x).group())):
        img=fr.load_image_file('/home/ubuntu/faces/' + name)

答え3

このsortコマンドを使用すると、目的の結果を得ることができます。

ls | sort -n -t '_' -k1

-nデフォルトの辞書順序ではなく数字で並べ替えます。フィールド区切り記号で
-t '_'指定されます。最初のフィールドをソートします。 _
-k1

答え4

テストされていて、うまく動作します。

find . -type f -iname "*.jpg" 2>/dev/null| sed "s/\.\///g"| awk -F "_" '{print $1,$2}'| sort -k1| awk 'OFS="_" {print $1,$2}'

まもなくPythonスクリプトを更新する予定です。

関連情報