0

Windowsでの検索と同様に、コンピューター全体でファイルを検索するスクリプトを作成しようとしています。ライブラリなしでやりたい。

私は、ディレクトリをディスクの開始に設定することから始め、次にどれだけのディレクトリがあるかを確認しました.現在のディレクトリで新しいディレクトリを検索する関数を作成したいので、最後にディスク内のすべてのディレクトリのリストを取得します. しかし、「.txt」で終わるすべてのファイルを見つけようとすると、WindowsError5 Access Denied というエラー メッセージが表示されます。私は何を間違っていますか?ありがとう

import os

os.chdir("\\.")
dir = os.listdir()

dirs = []

for x in dir:
    if os.path.isdir(x):
        dirs.append(x)

for y in dirs:
    o = os.listdir(y)
    for p in o:
        if p.endswith(".txt"):
            print(p)
input()
4

2 に答える 2

2

まず、ディレクトリ ツリーをたどりたい場合は、自分で構築しようとする代わりにos.walkを使用します。また、os.walk のようなものがどのように機能するかを知りたい場合は、ソース コードが os.py にあるはずです。

次に、管理者として実行しない限り、おそらくファイルシステム全体にアクセスできないため、アクセス権のないディレクトリをステップスルーしようとすると、大量のアクセス拒否エラーが発生します。これらのエラーに適切な方法で対処するには、try/catch を使用する必要があります (たとえば、エラーを出力して次のディレクトリに移動するなど)。

第三に、この考え全体はおそらく見当違いです。Windows デスクトップ サーチは、実際にはツリー全体を検索するのではなく、データベースを保持して検索するため、はるかに高速です (また、ユーザーが直接アクセスできないパスを検索することもできます。たとえば、/Users/ にアクセスできる場合があります)。つまり、WDS は /Users/foo 内のファイルを表示できますが、スクリプトでは表示できません)。

第 4 に、これはすべて POSIX の「検索」ツールを使用する方がはるかに簡単です。名前は忘れましたが、Windows に付属している DOS 由来のツールもあり、同じことを実行できますが、それほど柔軟ではありません。いずれにせよ、何十行もの Python ではなく、ワンライナーのシェル/バッチ コマンドです。

最後に、あなたがこれを書いた方法では、すべてのドライブではなく現在のドライブを検索しますが、これはおそらくあなたが望むものではないでしょうか?

于 2012-07-20T00:18:40.800 に答える
1

調べる権限のないディレクトリにヒットしました。例外をキャッチして、検索を続行します。

于 2012-07-20T00:15:49.633 に答える