프로그램/Python / / 2013. 5. 21. 13:50

python – os.glob 모듈

반응형

자세한 설명 : http://docs.python.org/2/library/glob.html


디스크에 있는 파일의 목록을 얻고 싶을 때.

디렉토리의 파일 목록을 얻으려면 glob모듈의 glob 함수를 사용하면 된다.

결과로 파일 명의 리스트를 넘겨준다.

와일드 카드 문자 (?,*)도 지원한다.

?는 임의의 문자 1개와 매칭된다.

*는 임의 개수(0개포함)의 모든 문자와 매칭 된다.

[...]는 괄호 안의 임의의 1개 문자와 매칭된다.


사용법 : glob.glob(path)

glob() 함수는 경로에 대응되는 모든 파일 및 디렉터리의 리스트를 반환


테스트

>>> import glob

>>> glob.glob('./[0-9].*')

['./1.gif', './2.txt']

>>> glob.glob('*.gif')

['1.gif', 'card.gif']

>>> glob.glob('?.gif')

['1.gif']]"


테스트

>>> import glob

>>> glob.glob('*.gif')

['card.gif']

>>> glob.glob('.c*')

['.card.gif']


테스트

if __name__ == '__main__':

    path = "C:\Users\newtoynt\Desktop\TEST"

    pathList  = glob.glob("%s/*.hwp"%(path))  # 확장자 hwp 만 얻기

    for path in pathList : 

        print path


결과값

C:\Users\newtoynt\Desktop\TEST\50���� ��.hwp

C:\Users\newtoynt\Desktop\TEST\����.hwp

C:\Users\newtoynt\Desktop\TEST\����2.hwp


사용법 : glob.iglob(path)


glob과 동일한 동작을 수행하지만, 리스트로 결과를 반환하는 것이 아니라 이터레이터를 반환.

한번에 모든 결과를 리스트에 담지 않으므로, 결과가 매우 많은 경우 유용하게 쓰일 수 있다.


테스트

if __name__ == '__main__':

    pathList  = glob.iglob("*")

    print pathList

    for path in pathList : 

        print path


결과값 

<generator object iglob at 0x00000000027112D0>

name_test.py

searchFileAndDirectory.py

treeTest.py


파일의 추가 정보 알아내기

어떤 파일의 종류를 알아내려면 os.path 모듈의 함수들을 이용 할수 있다.

isfile(path) - path가 일반 파일이면1 리턴

isdir(path) - path가 디렉토리(폴더) 이면 1 리턴

islink(path) - path가 심볼릭 링크이면 1 리턴

ismount(path) - path가 마운트 포인트이면 1리턴(unix)


os.path.getsize(filePath) - 파일의 크기를 얻는다.

os.path.getatime((filePath) - 파일의 최근 접근 시간을 얻는다.리턴 되는 숫자는 , 기준시간 (1970년 1월 1일 자정) 부터 현재까지 경과한 초

문자열 시간으로 변환을 할려면

time.ctime(os.path.getmtime(finePath)) 이렇게 해주면 파일의 수정 시간을 얻는다.



응용 파이썬 코딩

지정한 위치로부터 모든 디렉토리경로와, 파일경로를 얻어오는 코드

import glob

import os


searchFileList = []

searchDirList = []


def searchFileSetting():       

    dir = "C:\Users\newtoynt\Desktop\TEST"

    searchFile(dir, 0)


def searchFile(dir, depth,depthList=[]):

    for obj in glob.glob(dir + '/*') :

        if os.path.isdir(obj) :            

            print "search path : %s" %obj

            searchDirList.append(obj) # 디렉토리 path가 List에 저장

            searchFile(obj, depth + 1)

        elif os.path.isfile(obj) :

            print "search  file : %s" %obj

            searchFileList.append(obj)     # 파일 path가 List에 저장 

            depthList.append(obj)

             

if __name__ == '__main__':

    print "python test"

    searchFileSetting()


결과값은

디렉토리 경로와, 파일경로 들을 뿌려준다.


트리구하기

import glob

import os

ndir = nfile = 0


def pythonTreeTest(dir, depth) :

    global ndir, nfile

    for obj in glob.glob(dir + '/*'):

        if depth == 0:

            prefix = '|--'

        else :

            prefix = '|' + '   '  * depth + '|--'

        if os.path.isdir(obj):  # 디렉토리인 경우

            ndir += 1

            print (prefix + os.path.basename(obj))

            pythonTreeTest(obj, depth + 1)

        elif os.path.isfile(obj) :  # 파일인 경우

            nfile += 1

            print(prefix + os.path.basename(obj))

        else :  # 그외 경우 처리

            print(prefix + 'unkwon object : ' , obj )


if __name__ == '__main__':


    pythonTreeTest(".",0) # 처음에 현재 디렉토리로 지정

    print('\n', ndir, 'directories', nfile, 'files') # 전체 합계 출력


결과값

|--name_test.py

|--searchFileAndDirectory.py

|--testDir

|   |--treeDirTest.py

|--treeTest.py

|--treeTest_002.py

('\n', 1, 'directories', 5, 'files')

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유