追記
コメント欄が本番(短いけど)
@takahirom さんありがとうございます!
背景
os.listdir(path)
すると、path
内のファイル、ディレクトリ一覧をリストで出力してくれるけど、ディレクトリだけ、とかファイルだけ、とかを取得したいと考えるとちょっとなんかな、となったので考えてみた。
なお、環境はPython2.7.10、OSはWindows7です。
やってみた結果
なんかもっとスマートに出来る方法がありそうな気がします。
import glob
import os
def fileonly_listdir(path):
return [ i for i in os.listdir(path) if i not in [ j.replace(path, "").strip("\\") for j in glob.glob(os.path.join(path, "*") + "/")]]
わかりにくいので分解。
import glob
import os
def fileonly_listdir(path):
list_dir = os.listdir(path) # ディレクトリのオブジェクト一覧を取得…1
dir_only_list = glob.glob(os.path.join(path, "*") + "/") # 特定のpathの中の、末尾が"/"のオブジェクト=ディレクトリのみ抽出
# ただし、"path\\dir\\" という形式になる
dir_only_list = [ i.replace(path, "").strip("\\") for i in dir_only_list ] # 邪魔なものを排除…2
file_only_list = [ i for i in list_dir if i not in dir_only_list ] # 1から2を引き算
return file_only_list
つまり、ディレクトリだけのリストが欲しければ
import glob
[ i.replace(path, "").strip("\\") for i in glob.glob(os.path.join(path, "*") + "/")]
で良いです。
リスト内包表記をネストして使うとすごく分かりづらいので、filter
とか使った方が良いのかも知れません。