[IronPython] 디렉토리 탐색 Programming

예전에 CPython에서 디렉토리 탐색관련 클래스를 소개한 적이 있습니다.
이번에는 IronPython에서 .NET 클래스들을 활용하여 동일한 일을 하는 클래스를 소개합니다. (예전 것을 변형함.)

이렇게 한 이유는 IronPython에서 pyc.py를 통해 스크립트를 exe 형태의 어셈블리로 변환할 때, os 모듈을 사용할 경우, os모듈을 찾을 수 없다는 오류가 발생하기 때문입니다. 따라서, os 모듈의 의존성을 없애고 순수 .NET 모듈만 활용하도록 바꿀 필요가 있었기 때문입니다.

이러한 오류의 원인은 IronPython.dll에 os 모듈을 built-in 하지 않았기 때문입니다. 앞으로는 고쳐질 것 같은데.. 그리 빨리될지는 의문입니다. 그럼 코드는 아래와 같습니다.

import clr
clr.AddReference("System")

from System.IO import (
    Directory, File, Path
)

class CDirTraverser:
    dirFunc = None
    fileFunc = None

    def __init__(self, dfunc, ffunc):
        self.dirFunc = dfunc
        self.fileFunc = ffunc
        
    def _traverse(self, fname):
        flist = list(Directory.GetFileSystemEntries(unicode(fname)))
        cnt = 0
        for f in flist:
            if Directory.Exists(f):
                if self.dirFunc != None:
                    self.dirFunc(f)
                self._traverse(f)
            elif File.Exists(f):
                if self.fileFunc != None:
                    self.fileFunc(f)
  
    def Run(self, fname):
        self._traverse(fname)

def FileFunc(file):
    print "[file]:", file

def DirFunc(dir):
    print "[dir]:", dir

if __name__ == "__main__":
    trav = CDirTraverser(DirFunc, FileFunc);
    trav.Run("D:\\docs");





1 2 3 4 5 6 7 8 9 10 다음