티스토리 뷰

반응형

0. 폴더정보 얻는 모듈이 없을까?

"직접코드를 작성하는게 맞을까?"

 

첫번째, 직접구현하는 접근방식 

 

지난 번에 작성한 포스트를 한번 보고 넘어가겠습니다.

 

https://dataleader.tistory.com/24

 

[파이썬(python) 이야기 4화] 폴더 내 파일 검색하기, 폴더 내 파일 정보 데이터 프레임으로 저장하

0. 폴더 검색? 프로그램을 개발할 때 종종 폴더를 검색해 파일을 수정하는 경우가 발생합니다. 그러나 파일이 하나일 경우에는 크게 문제가 없지만, 파일이 여러 개일 경우 어떻게 해야할 까요?

dataleader.tistory.com

이 포스트에서는 아래와 같이 폴더 내의 파일을 검색하는 함수를 직접 만들었습니다. 이 함수는 특히 재귀호출(recursion)까지 이용해서 폴더 내에 폴더가 존재하는 경우까지 모두 고려해 폴더를 검색했습니다. 

import pandas
import os

dir = 'C:/Users/Jeatek/Desktop/Python Project'
files = os.listdir(dir)

def file_search(dir) :

  files = os.listdir(dir)
  
  for file in files :
     fullname_file = os.path.join(dir, file)
     if os.path.isdir(fullname_file) : 
        file_search(fullname_file)
     else :
        name, ext = os.path.splitext(file)
        print(file + '\t' + name + '\t' + ext + '\t' + fullname_file + '\t')

이렇게 직접 함수를 작성하는 것도 좋은 방법입니다. 다른 방법은 없을까요? 이럴 때 사용하면 좋은 모듈은 없을까요?

 

1. 파이썬의 폴더 검색, glob.glob

 

파이썬에서는 이미 glob라는 모듈을 통해 폴더내 파일을 검색할 수 있습니다. 이번 포스트는 이 모듈을 사용하는 방법에 대해서 알아보겠습니다. 

 

일단 간단하게 사용법을 간단하게 요약해 봅시다.

 

(1) glob 모듈을 import 합니다. 

(2) glob.glob(검색대상폴더/파일지정) → Ex> glob.glob("C:/Desktop/*.txt") #폴더내 모든 txt 확장자 파일검색

(3) 위의 함수결과는 리스트로 리턴됨

 

아주 간단합니다. 위의 모든 과정은 단 한줄로 처리됩니다. 

import glob

filelist = glob.glob("C:/Users/ryuje/Desktop/*.txt")

출력까지 하면 아래와 코드는 아래와 같습니다. 

import glob

filelist = glob.glob("C:/Users/ryuje/Desktop/*.txt")
for item in filelist :
    print(item)

제 경우 결과는 아래와 같이 나타났습니다. 어떤가요? 단 한줄로 원하는 결과를 만들어 내니 정말 신기합니다 .

 

2. 폴더 내 폴더 검색하기

 

그렇다면 폴더 내 폴더를 검색하고 싶을 때는 어떻게 해야 할까요?   정말 멋지게 glob.glob는 이 모두를 지원합니다. 그것도 정말 일관되게 단 한줄로 처리합니다.

 

먼저 폴더내 하위폴더에서 원하는 형식의 파일을 찾고 싶으면, *를 이용해 검색하면 됩니다. 예시는 아래와 같습니다. 

import glob

filelist = glob.glob("C:/Users/ryuje/Desktop/*/*.txt") #하위폴더 검색
#filelist = glob.glob("C:/Users/ryuje/Desktop/*.txt") --> 하나의 폴더

for item in filelist :
    print(item)

한 단계 하위 폴더는 위와 같이 /*/으로 검색하면 해당 형식이 존재하는 파일을 검색해서 리스트에 출력해 줍니다. 저의 경우는 아래와 같이 결과가 나타났습니다. 

자~ 그럼 마지막으로 glob.glob가 재귀적 파일 검색이 가능한지 알아봐야겠죠? 다행이도 glob.glob는 재귀적 파일 검색이 가능한 모듈입니다. 사용법도 크게 어렵지 않습니다

 

아래와 같이 /**/로 표기하고, recusive 파라미터를 true로 설정하면 해당위치의 모든 하위 폴더의 파일 형식을 검색한 결과를 보여줍니다. 

import glob

filelist = glob.glob("C:/Users/ryuje/Desktop/**/*.txt", recursive=true) #모든 하위폴더 검색
#filelist = glob.glob("C:/Users/ryuje/Desktop/*/*.txt") #하위폴더 검색

for item in filelist :
    print(item)

 결과를 확인해보면 모두 나타난 것을 확인할 수 있습니다. 

참 멋있죠~!!!!

3. 마무리

이번 포스트에서는 파일검색을 하기 위한 glob.glob 함수에 대해서 알아보았습니다. 그리고 직접 개발을 하는 방법도 잠깐 리뷰를 해 봤습니다. 

 

개발을 하다보면, 직접개발이냐 아니면 모듈을 이용할 것인가에서 가끔 혼란스러울 경우가 있습니다. 하지만 항상 개발에는 융통성이라는 것이 필요합니다. 직접 개발도 모듈을 사용해서 빠르게 구현하는 것도 둘다 중요합니다. 

 

이번 포스트를 통해 현장에서 폴더 검색할 때 도움이 되었으면 좋겠습니다.

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함