質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

276閲覧

glob.glob()で取得したフォルダのパスを特定の条件のもと、ソートしたい

shin_shin

総合スコア96

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/02/16 05:56

掲題にある通り、glob.glob()で取得したフォルダのパスを、特定の条件下でソートしたいです。
具体的には、ファイルパスの最後のディレクトリに書いてある日付で(昔→今)ソートしたいです。

以下が例になります。

Python

1folder = glob.glob("C:\Users\Desktop\Datasets\*")

[出力結果]
[C:\Users\Desktop\Datasets\2016.12.1,
C:\Users\Desktop\Datasets\2016.12.11,
C:\Users\Desktop\Datasets\2016.12.12
C:\Users\Desktop\Datasets\2016.12.2,
C:\Users\Desktop\Datasets\2016.12.20,
C:\Users\Desktop\Datasets\2016.12.3,
C:\Users\Desktop\Datasets\2016.12.30,
C:\Users\Desktop\Datasets\2017.2.1,
C:\Users\Desktop\Datasets\2017.2.10,
C:\Users\Desktop\Datasets\2017.2.11,
C:\Users\Desktop\Datasets\2017.2.2]

[理想の出力結果]
[C:\Users\Desktop\Datasets\2016.12.1,
C:\Users\Desktop\Datasets\2016.12.2,
C:\Users\Desktop\Datasets\2016.12.3,
C:\Users\Desktop\Datasets\2016.12.11,
C:\Users\Desktop\Datasets\2016.12.12,
C:\Users\Desktop\Datasets\2016.12.20,
C:\Users\Desktop\Datasets\2016.12.30,
C:\Users\Desktop\Datasets\2017.2.1,
C:\Users\Desktop\Datasets\2017.2.2,
C:\Users\Desktop\Datasets\2017.2.10,
C:\Users\Desktop\Datasets\2017.2.11]

めんどくさい質問で恐縮ですが、ご教授のほど、お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

書いてみた。

Python

1from datetime import datetime 2 3data = [ 4 'C:\Users\Desktop\Datasets\2016.12.1', 5 'C:\Users\Desktop\Datasets\2016.12.11', 6 'C:\Users\Desktop\Datasets\2016.12.12', 7 'C:\Users\Desktop\Datasets\2016.12.2', 8 'C:\Users\Desktop\Datasets\2016.12.20', 9 'C:\Users\Desktop\Datasets\2016.12.3', 10 'C:\Users\Desktop\Datasets\2016.12.30', 11 'C:\Users\Desktop\Datasets\2017.2.1', 12 'C:\Users\Desktop\Datasets\2017.2.10', 13 'C:\Users\Desktop\Datasets\2017.2.11', 14 'C:\Users\Desktop\Datasets\2017.2.2' 15] 16 17def get_date(datum): 18 return datetime.strptime( 19 datum.split('\')[-1], '%Y.%m.%d' 20 ) 21 22data.sort(key=get_date) 23print(*data, sep='\n')

実行結果 Wandbox

plain

1C:\Users\Desktop\Datasets\2016.12.1 2C:\Users\Desktop\Datasets\2016.12.2 3C:\Users\Desktop\Datasets\2016.12.3 4C:\Users\Desktop\Datasets\2016.12.11 5C:\Users\Desktop\Datasets\2016.12.12 6C:\Users\Desktop\Datasets\2016.12.20 7C:\Users\Desktop\Datasets\2016.12.30 8C:\Users\Desktop\Datasets\2017.2.1 9C:\Users\Desktop\Datasets\2017.2.2 10C:\Users\Desktop\Datasets\2017.2.10 11C:\Users\Desktop\Datasets\2017.2.11

ちゃんと理解した上で使ってくださいね。
理解とはつまり、次回以降同様の問題は自力でクリアできると言うことです。

投稿2018/02/16 06:12

LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

1.splitして、
2.日付にキャストして、
3.並び替えたインデックスを取得して、
4.並び替えればできます。

python

1import glob 2import datetime 3import subprocess 4 5run = subprocess.getoutput 6 7run('mkdir datasets') 8for k in range(2015, 2017): 9 for i in range(1, 13): 10 for j in range(1, 28): 11 run('touch datasets/{0}.{1}.{2}'.format(k, i, j)) 12 13folder = glob.glob('./datasets/*') 14 15ds = [datetime.date(*map(int, f.split('/')[-1].split('.'))) for f in folder] 16 17ans = [f for f,d in sorted(zip(folder, ds), key=lambda x: x[1])]

投稿2018/02/16 06:01

編集2018/02/16 06:11
mkgrei

総合スコア8560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shin_shin

2018/02/16 06:06

ご回答ありがとうございます! 恐縮ですが、できれば、コードを見せていただきたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問