2011-07-27 18 views
1

に「LS」を呼び出すよりも、ディレクトリ一覧を取得する方法、およびいくつかのテストは、(両方os.popenを実行します)+(読み)とsubprocess.check_output()読み出すほぼ同等であるように見えますフォルダの内容os.popen()+ read()またはsubprocess.check_output()のいずれかの組み合わせを改善する方法はありますか?私はlsにフォルダの数を持っており、出力を読み、上記のいずれかを使用して似ていますが、プロファイリング結果によると、主要なボトルネックを表します。高速な検索後、サブプロセス

+0

あなたの質問のタイトルを、私が理解していることを明らかにするように修正しました。あなたの元のタイトルは、サブプロセスを使用していたものを示すものではありませんでした。 – zwol

答えて

5

os.listdirおよび/またはos.walk、おそらくos.statファミリの機能を探しています。これらは、(Pythonバインディングに)ls自体を使用するのと同じプリミティブなので、何でも、あなたがこれらを行うことができますlsの出力を解析することによって行うことができます。私はあなたがすべてosos.pathを通じて慎重に読み、そしてstatモジュールが提供するお勧めします。外部プログラムを必要としないこともあります。

また、stat, the underlying system callのドキュメントも読んでください。これはC指向ですが、os.statの理解に役立ちます。

+0

ああ、os.listdirは私が必要とするものです!何らかの理由で、私はサブプロセスのドキュメントだけをチェックしました。ありがとうございました! – melnikovkolya

2

なぜあなただ​​けos.listdirと直接ディレクトリの内容を読んでいませんか?なぜあなたはlsにシェルする必要がありますか?ファイル名だけでなくファイルに関する詳細情報が必要な場合は、os.statも使用できます。あなた自身のためにサブプロセスを作成するよりも、システムコールを自分で行う方がはるかに効率的です。

完全にディレクトリトラバーサルを行うため、os.walkがあります。 shutil moduleにもいくつかの便利な機能があります。

+0

ありがとうございます。これを行う:) – melnikovkolya

+0

'glob'モジュールは、必要なものに応じて便利なショートカットを提供します。 –

0

使用グロブ:

>>> from glob import glob 
>>> glob('*') 

構文は同じです。

glob('*.txt') # the same as "ls *.txt" 
関連する問題