LoginSignup
2
6

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-10-11

追記

コメント欄が本番(短いけど)
@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とか使った方が良いのかも知れません。

2
6
2

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
2
6