12
4

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.

Pythonで自然順ソート 1,10,11,2,20...ではなく、1,2,3,4,5,6,7,8,9,10,11...

Last updated at Posted at 2020-12-20

例えば、1.jpg から 20.jpg までがランダム順であるディレクトリがあるとします。

path = "./directory"
file_names = os.listdir(path)
print(file_names)

['18.jpg','5.jpg','1.jpg','11.jpg','20.jpg','6.jpg','8.jpg','4.jpg','2.jpg','12.jpg','14.jpg','19.jpg','10.jpg','3.jpg','7.jpg','9.jpg','13.jpg','16.jpg','17.jpg']

これを sorted メソッドで並べ替えると、

sorted_file_names = sorted(file_names)
print(sorted_file_names)

['1.jpg', '10.jpg', '11.jpg', '12.jpg', '13.jpg', '14.jpg', '16.jpg', '17.jpg', '18.jpg', '19.jpg', '2.jpg', '20.jpg', '3.jpg', '4.jpg', '5.jpg', '6.jpg', '7.jpg', '8.jpg', '9.jpg']

というように大きい桁の数字を基準にソートされてしまいます

1,2,3,4,5,6,7,8,9,10,11...と10進数で並べかえたいときは、natsort というライブラリが使えます

pip install natsort

from natsort import natsorted

natsorted_file_names = natsorted(file_names)

print(sorted_file_names)

['1.jpg', '2.jpg', '3.jpg', '4.jpg', '5.jpg', '6.jpg', '7.jpg', '8.jpg', '9.jpg', '10.jpg', '11.jpg', '12.jpg', '13.jpg', '14.jpg', '16.jpg', '17.jpg', '18.jpg', '19.jpg', '20.jpg']

🐣


フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com

Core MLを使ったアプリを作っています。
機械学習関連の情報を発信しています。

Twitter
Medium

12
4
3

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
12
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?