본문 바로가기

[Study & Job]/[기타]

[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");

============================================================================

반응형