1

ここに私の問題があります。仕事中、私は 2 つのディレクトリとディレクトリ内のすべてのサブ フォルダーを使用して作業しています。ファイル名の入力を求めるプログラムを作成したいと思います。ファイル名が指定された後、これらの 2 つのディレクトリと、これらのディレクトリ内のすべてのサブフォルダーを検索して、名前が一致するファイルを探します。これを行う簡単な方法はありますか。どんな助けでも大歓迎です。私はpython 3でこれをやりたいと思っています(注:これは私の最初の実際のプロジェクトであり、正直なところ、どこから始めればよいかわかりません。)

4

1 に答える 1

2

これは、フォルダー内のすべてのファイルを返す再帰ヘルパー関数を含む関数です (辞書形式: {file_name: file_path, ...}.

import os, os.path

def getFiles(path):
    '''Gets all of the files in a directory'''
    sub = os.listdir(path)
    paths = {}
    for p in sub:
        print p # just to see where the function has reached; it's optional
        pDir = os.path.join(path, p)
        if os.path.isdir(pDir): 
            paths.update(getAllFiles(pDir, paths))
        else:
            paths[p] = pDir
    return paths

def getAllFiles(mainPath, paths = {}):
    '''Helper function for getFiles(path)'''
    subPaths = os.listdir(mainPath)
    for path in subPaths:
        pathDir = pDir = os.path.join(mainPath, path)
        if os.path.isdir(pathDir):
            paths.update(getAllFiles(pathDir, paths))
        else:
            paths[path] = pathDir
    return paths

たとえば、 を探している場合myfile.txt、辞書のキーと値のペアの 1 つが のようになり{'myfile.txt': 'C:\Users\Example\Path\myfile.txt', ...}ます。

フォルダーに含まれるファイルの数によっては、遅くなる場合があります。私の検索にはsys.path(10個ほどのフォルダーがあり、そのうちの1つPython\Libは巨大です)、約9秒かかります。

于 2013-04-24T17:27:29.520 に答える