Edited at

ディレクトリ内のディレクトリを除くファイル名だけを抜き出す

More than 3 years have passed since last update.


追記

コメント欄が本番(短いけど)

@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とか使った方が良いのかも知れません。