107

私のPythonスクリプトはos.listdir(path)、パスが1つずつ処理する必要のあるアーカイブを含むキューである場所を実行します。

問題は、リストを配列で取得してから、単純なを実行することarray.pop(0)です。プロジェクトを破壊するまでは問題なく動作していました。これで、配列内のフォルダーを取得しました.svn。もちろん、アプリケーションがクラッシュします。

だからここに私の質問があります:実行時に隠しファイルを無視する関数はありますos.listdir()か?そうでない場合は何が最善の方法ですか?

4

8 に答える 8

125

自分で書くことができます:

import os

def listdir_nohidden(path):
    for f in os.listdir(path):
        if not f.startswith('.'):
            yield f

または、 globを使用できます:

import glob
import os

def listdir_nohidden(path):
    return glob.glob(os.path.join(path, '*'))

これらのいずれも、で始まるすべてのファイル名を無視します'.'

于 2011-08-17T20:53:33.933 に答える
24

Windows、Linux、OS Xの場合:

if os.name == 'nt':
    import win32api, win32con


def folder_is_hidden(p):
    if os.name== 'nt':
        attribute = win32api.GetFileAttributes(p)
        return attribute & (win32con.FILE_ATTRIBUTE_HIDDEN | win32con.FILE_ATTRIBUTE_SYSTEM)
    else:
        return p.startswith('.') #linux-osx
于 2012-12-28T00:26:46.293 に答える
15

グロブ

>>> import glob
>>> glob.glob('*')

(内部で使用するとglob主張しますが、を使用するのではなく、先頭をチェックします。)listdirfnmatch'.'fnmatch

于 2011-08-17T20:51:19.600 に答える