1

私は Python の学習曲線が低く、クラスのインスタンス化に関する基本的な何かが欠けていると思います。以下のコードには、再帰検索中にリストに保存するファイルとディレクトリの形式を含む単純なクラスがあります。ファイル名はクラスのディレクトリ名とは別に保存され、2 つのインスタンスがあります。1 つは "RFI" というテキストを含むファイルとディレクトリを探し、もう 1 つは "CCO" を探しています。実行後、print ステートメントは、RFI インスタンスの RFI 一致と CCO インスタンスの CCO 一致ではなく、両方のインスタンスのすべての一致を表示します。「fileMatches」と「dirMatches」が静的変数として動作しているように (用語を正しく理解していれば)、1 つのインスタンスに追加されます。

import fnmatch
import os

path = '.'
allDocs = []

class Docs :
    title = []
    nameFormats = []
    fileMatches = []
    dirMatches = []
    def __init__ (self, inTitle, inFormats):
        self.title = inTitle
        self.nameFormats = inFormats

allDocs.append(Docs('RFI','RFI*[0-999]*'))
allDocs.append(Docs('CCO','CCO*[0-999]*'))

for root, dirnames, filenames in os.walk(path):
    print ("Root: " + root)
    for currDoc in allDocs :
        for currDirname in fnmatch.filter(dirnames, currDoc.nameFormats):
            currDoc.dirMatches.append(currDirname)
        for currFilename in fnmatch.filter(filenames, currDoc.nameFormats):
            currDoc.fileMatches.append(currFilename)

print ("------- Results ----------")
for currDoc in allDocs :
    print (currDoc.title, currDoc.nameFormats, "directory matches: ", currDoc.dirMatches)
    print (currDoc.title, currDoc.nameFormats, "     file matches: ", currDoc.fileMatches)

以下は、両方のインスタンスで同じ値を示す最後の print ステートメントからの出力です。

------- Results ----------
RFI RFI*[0-999]* directory matches:  ['RFI#04 Blah']
RFI RFI*[0-999]*      file matches:  ['CCO#02 Blah.pdf', 'CCO#01 Blah.pdf', 'RFI #1.pdf', 'RFI #2.pdf', 'RFI #3.pdf']
CCO CCO*[0-999]* directory matches:  ['RFI#04 Blah']
CCO CCO*[0-999]*      file matches:  ['CCO#02 Blah.pdf', 'CCO#01 Blah.pdf', 'RFI #1.pdf', 'RFI #2.pdf', 'RFI #3.pdf']
4

1 に答える 1