[Python] 코딩 도장 - 파일찾기
Updated:
코딩 도장 사이트의 문제를 직접 풀어본 내용을 정리하여 올립니다.
코딩 도장에서 여러 문제를 확인할 수 있습니다.
난이도 순으로 차근차근 풀어보려 합니다.
[문제: 파일찾기] - Lv.2
A라는 디렉토리 하위에 있는 텍스트 파일(*.txt) 중에서 LIFE IS TOO SHORT 라는 문자열을 포함하고 있는 파일들을 모두 찾을 수 있는 프로그램을 작성하시오.
단, 하위 디렉토리도 포함해서 검색해야 함.
출처: https://codingdojang.com/scode/404?answer_mode=hide
[풀이]
import os
import glob
import re
path = r'C:\Users\ekzm3\Desktop\Github_kkd\Python_Study_코딩 도장\A'
def search_file(root_path, filetype = "txt"):
# 디렉토리 내의 txt 파일
a = []
a = a + glob.glob(os.path.join(root_path, f"*.{filetype}"))
# 디렉토리 내의 모든 파일
files = os.listdir(root_path)
# 디렉토리 내의 파일이 폴더인 경우 txt 파일 찾기
for file in files:
path2 = os.path.join(root_path, file)
if os.path.isdir(path2):
a = a + glob.glob(os.path.join(path2, f"*.{filetype}"))
# 파일명만 저장
# b = [i.split("\\")[-1] for i in a]
# 정규식 지정
p = re.compile("LIFE IS TOO SHORT")
for i in a:
m = p.search(i)
if m:
print(i)
search_file(path)
C:\Users\ekzm3\Desktop\Github_kkd\Python_Study_코딩 도장\A\LIFE IS TOO SHORT - 복사본.txt
C:\Users\ekzm3\Desktop\Github_kkd\Python_Study_코딩 도장\A\LIFE IS TOO SHORT.txt
C:\Users\ekzm3\Desktop\Github_kkd\Python_Study_코딩 도장\A\새 폴더\AALIFE IS TOO SHORT.txt
C:\Users\ekzm3\Desktop\Github_kkd\Python_Study_코딩 도장\A\새 폴더 (2)\A_LIFE IS TOO SHORT.txt
우선 처음 경로에서 glob.glob()
과 os.path.join()
으로 txt파일은 모두 저장하는 방법을 선택했다.
그 후 하위 디렉토리에서도 같은 방법으로 txt파일은 모두 저장하였다.
마지막으로 정규식을 이용해서 LIFE IS TOO SHORT가 포함되어 있는 경우만 출력하였다.
for root, dirs, files in os.walk(path):
for file in files:
print(file)
b.txt
LIFE IS TOO SHORT - 복사본.txt
LIFE IS TOO SHORT.txt
AALIFE IS TOO SHORT.txt
af.txt
A_LIFE IS TOO SHORT.txt
c.txt
os.walk()
를 사용하면 더 간단하게 모든 파일을 확인 할 수 있다.
나는 txt파일만 만들어 두었는데 여러 파일이 혼합된 경우를 고려해서 조건을 추가하면 더 간단하게 만들 수 있을 것 같다.
[추천 풀이]
import os
def func(dirname):
for root, dirs, files in os.walk(dirname):
for name in files:
if '.txt' in name:
f = open(os.path.join(root,name),'r')
txt = f.read()
if 'LIFE IS TOO SHORT' in txt: print name
f.close()
func('.')
이 분은 os.walk()
로 푸셨는데 파이썬 2.x 버전이어서 수정은 안하고 그냥 대략적인 흐름만 이해하였다.
Leave a comment