본문 바로가기
Python/Basic

[파이썬, Python] 파일 입출력 라이브러리 - 2️⃣fnmatch & shutil _파이썬으로 파일 찾기, 복사, 이동하기!

by coding-choonsik 2023. 3. 14.
728x90
반응형
SMALL

1. glob.glob() 이용하여 확장자로 파일 찾기

1-1. 현재 폴더에서 파일 찾기

# 현재 경로 알아보기
os.getcwd()
>>> 'C:\\yesung\\jupyter'

# glob으로 .txt파일 전체 불러오기
for filename in glob.glob('*.txt'):   # 모든 txt파일을 찾기
    print(filename)
>>>                      # 현재 폴더에 .txt 파일 없음!

1-2. 하위 폴더에서 파일 찾기

 

하위 폴더 sample 내 txt 파일

for filename in glob.glob('**/*.txt): 
	print(filename)
    
>>> 
sample\새파일1.txt
sample\새파일2.txt
sample\새파일3.txt
sample\새파일4.txt
sample\새파일5.txt

✅재귀적으로 모든 txt 파일과 모든 디렉토리를 찾는 방법

 

for filename in glob.glob('**/*.txt', recursive=True):   
    print(filename)
    
>>> 주피터노트북.txt   #jupyter 폴더
sample\새파일1.txt
sample\새파일2.txt
sample\새파일3.txt
sample\새파일4.txt
sample\새파일5.txt

✅ 재귀적으로 현재폴더와 하위 폴더에서 파일명이 4글자인 모든 파일 찾기

for filename in glob.glob('????.*', recursive=True):
	print(filename)
    
>>> list.pkl
dict.pkl

 

✅ 재귀적으로 현재폴더와 하위 폴더에서 파일명이 6글자인 모든 파일 찾기

for filename in glob.glob('??????.*', recursive=True):  # 글자수 6개
    print(filename)
    
>>> 주피터노트북.txt

 

 

✅ 재귀적으로 현재폴더와 하위 폴더에서 파일명이 4글자 소문자 영어이고 모든 파일 찾기

# 대문자 [A-Z], 대소문자 둘다 [a-zA-Z]
for filename in glob.glob('[a-z][a-z][a-z][a-z].*', recursive=True):   

>>> dict.pkl
list.pkl

 

✅ 하위 폴더에서 파일명에 '새파일' 이 들어가는 모든 파일 찾기 

for filename in glob.glob('**/새파일*.*'):
    print(filename)
    
>>> sample\새파일1.txt
sample\새파일2.txt
sample\새파일3.txt
sample\새파일4.txt
sample\새파일5.txt

 

✅ 하위 폴더에서 파일명에 '프로젝트'가 들어가는 모든 파일 찾기

project 폴더 내 파일

for filename in glob.glob('**/*프로젝트*.*'):
	print(filename)
    
>>> project\25_프로젝트 실습.ipynb
project\프로젝트 개요.txt

2.  fnmatch

  • glob과 동일하게 특정한 패턴을 따르는 파일명을 찾아주는 모듈
  • 파일명 매칭 여부를 True, False 형태로 반환하기 때문에 os.listdir() 함수함께 사용

 

파일명은 '새'로 시작하고 확장명은 .txt
      확장자를 제외한 파일명의 길이는 4개 이며, 파일명의 마지막 문자는 숫자인 파일 찾기

sample 폴더 내 txt 파일

import fnmatch

print(os.listdir('./sample'))
>>> ['새파일1.txt', '새파일2.txt', '새파일3.txt', '새파일4.txt', '새파일5.txt']

for filename in os.listdir('./sample'):
	# filename과 '새??[0-9].txt'이 같으면 True
    if fnmatch.fnmatch(filename, '새??[0-9].txt'):    # [0-9]: 숫자
        print(filename)
        
>>> 
새파일1.txt
새파일2.txt
새파일3.txt
새파일4.txt
새파일5.txt

3. shutil

  • 파일을 복사하거나 이동할 때 사용하는 내장 모듈

 

3-1. 파일 복사하기

  • copy()

 

✅ '새파일1.txt' 파일을 복사하기

import shutil

shutil.copy('./sample/새파일1.txt', './sample/새파일1_복사본.txt')
>>> './sample/새파일1_복사본.txt'

복사가  잘 되었다. 😀

 


3-2. 파일 이동하기

  • move()
  • 동일 폴더에 확장명을 바꿔서 이동시켜주면 확장명이 바뀐 파일로 덮어씀

 

 

✅ sample 폴더에 있는 새파일1_복사본.txt를 상위 폴더로 이동시키기

shutil.move('./sample/새파일1_복사본.txt','./새파일1_복사본.txt')

>>> './새파일1_복사본.txt'

상위 폴더로 이동 되었다.


 

✅ 파일의 확장명 바꾸기

shutil.move('./새파일1_복사본.txt', './새파일1_복사본.py')

>>> './새파일1_복사본.py'

 

txt파일이 py파일로 바뀌었다.

shutil.move('./새파일1_복사본.py', './새파일1_복사본.txt')

>>> './새파일1_복사본.txt'

다시 txt 파일로 돌려주었다.

 

 

 

 

 

 

 

728x90
반응형
LIST