2013-05-27 2 views
0

저는 Python 학습 곡선이별로 없으며 클래스 인스턴스화와 관련하여 기본적인 것이 빠져 있다고 생각합니다. 아래의 코드에서 재귀 검색 중에 목록에 저장하려는 파일 및 디렉토리의 형식을 포함하는 간단한 클래스가 있습니다. 파일 이름은 클래스의 디렉토리 이름과 별도로 저장되며 두 인스턴스가 있습니다. 하나는 "RFI"텍스트가있는 파일과 디렉토리를 찾고 다른 하나는 "CCO"를 찾고 있습니다. 실행 후 print 문은 RFI 인스턴스의 RFI 일치 및 CCO 인스턴스의 CCO 일치 대신 모든 일치를 인스턴스로 표시합니다. 마치 "fileMatches"와 "dirMatches"가 정적 변수로 동작하는 것과 같습니다 (정확하게 용어를 사용하는 경우). 따라서 하나의 인스턴스 목록에 추가하면 둘 다에 추가됩니다.클래스 인스턴스를 만들고 목록에 추가하십시오.

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) 

아래는 두 경우 모두에 대해 동일한 값을 보여줍니다 마지막 인쇄 문에서 출력 :

------- 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'] 

답변

1

이것은 title 때문에, nameFormats 등 정적이다. 이 개체는 모든 문서 인스턴스간에 공유됩니다. 각 인스턴스에 고유 한 목록이 있으면 생성자에서 해당 목록을 만듭니다.

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

아. 그게 효과가 있었어. 많은 감사합니다. 내가 만든 유일한 조정은 "self.title"과 "self.nameFormats"가 샘플 코드에서 두 번 정의되었습니다. 저것이 오타입니까, 아니면 뭔가 빠졌습니까? – buttonsrtoys

관련 문제