[Python] 특정 조건 파일들만 추출하기 (glob, os, endswith)
코딩을 하다 보면, 특정 조건을 만족하는 파일들의 리스트가 필요할 때가 자주 있다.
Python에서 간단하게 파일 리스트들을 추출하는 방법들을 알아보자.
설치 없이 바로 쓸 수 있는 기본적인 방법과
아주 심플하게 쓸 수 있는 os.listdir
을 활용하는 방법
그리고 가장 다양하고 편리하게 응용할 수 있는 glob
방법을 소개한다.
Basic - 설치 없이 필터링 하기
설치 없이 string class에서 바로 사용하고 싶으면 startswit()
혹은 endswith()
를 사용할 수 있다.
files = [file for file in files if file.startswith('ab')] # startswith : file이라는 string이 'ab'로 시작하면 True, 아니면 False 출력
files = [file for file in files if file.endswith(".txt")] # endswith : file이라는 string이 '.txt'로 끝나면 True, 아니면 False 출력
혹은 find()
함수를 응용할 수도 있다.
s.find('가') # 가 문자의 위치 index 출력
files = [file for file in files if file.find('가') == 2] # index 2의 글자가 '가'인 파일들만 추출
os.listdir() - 폴더 속 모든 파일명 불러오기
os.path.join(경로, 경로)
등 다양한 기능을 위해 자주 사용되는 os
내부의 기능으로 편하게 파일 리스트를 추출할 수 있는 방식이다.
os의 listdir을 활용하면, 아주 간단한 한 줄로 특정 폴더 내부의 파일명을 모두 리스트로 받을 수 있다.
import os
os.listdir(path)
glob - 가장 심플하고 다양하게
glob을 이용하면 특정한 패턴을 가진 파일의 경로를 리스트 형태로 추출할 수 있다.
recursive하게 하부 폴더들까지 전부 볼 수 있다는 점을 포함하여, 가장 쉽게 다양한 형태의 조건을 부여할 수 있다는 점에서 개인적으로 가장 선호하는 방식이다.
import glob
file_pathes = glob.glob('dirpath\\**\\*.txt', recursive=True)
위와 같이 입력하면 dirpath 라는 폴더 속에 있는 모든 txt 파일의 경로를 추출할 수 있다.
이때 주의할 점은 출력되는 경로는 입력한 경로 형식과 동일하게 출력된다.
예를 들면, 같은 파일들이라도 ‘c:/workspace/.txt’를 보내면 [‘c:/workspace/123.txt’]를 받게 되고, ‘..\workspace\.txt’로 보내면 [‘..\workspace\123.txt’]를 받는다. 따라서 필요한 형식에 맞춰서 입력하는 것이 편리하다.
*
: 임의의 string (단일 단계)**
+recursive=True
: 해당 폴더 내부 폴더까지 모두 포함하여, 모든 임의의 string?
: 임의의 문자 1개