개발/PyQt&Python

파이썬 디렉터리/파일 관련 함수 정리(os/os.path/glob,shutil)

알 수 없는 사용자 2022. 11. 9.
반응형
os

os.getcwd() : 파이썬 현재 작업중인 경로 불러오기

os.getcwd()
#C:\Program Files\Python39

 

os.chdir(변경할 경로) : 현재 작업중인 경로 변경하기

os.chdir("C:/Users/PLAYHOOS/")

 

os.listdir(경로) : 경로 내의 폴더/파일 리스트를 가져옴

dir = 'C:\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Mods'
os.listdir(dir)
#['폴더명',...'파일명']

 

os.makedirs(경로/폴더명) : 지정 경로에 폴더 생성

os.makedirs('C:/Prj/폴더명')

 

os.path

os.path.abspath(경로) : 절대경로 가져오는 함수

절대경로 : 최상위 디렉터리가 포함된 경로

dir = __file__
os.path.abspath(dir)
#C:\Users\JESS\PycharmProjects\mystudy\main_py.py

 

os.path.relpath(경로) : 상대경로 가져오는 함수

상대경로 : 현재 위치 기준 해당 파일(폴더)까지의 상대경로

dir = __file__
os.path.relpath(dir)
#PycharmProjects\mystudy\main_py.py

 

os.path.normpath(경로)) : 경로명 정규화하기

중복 구분자와 상위참조를 접어 경로명을 정규화시켜 반환함

dir = 'A/B/../C//D/'
os.path.normpath(dir))
#A\C\D

 

os.path.basename(경로) : 경로의 마지막 값 가져오기

normpath로 정규화해서 가져오지 않을 경우 마지막 경로가 / 로 끝나면 '' 이 반환됨

dir = 'A/B/../C//D/'
os.path.basename(os.path.normpath(dir))
#D

 

os.path.exists(디렉터리/파일 경로) : 디렉터리/파일이 존재하는지 확인

존재할 경우 True, 존재하지 않을 경우 False 반환

fakedir = 'A/B/../C//D/'
dir = 'C:\Program Files\Python39'
os.path.exists(fakedir)
os.path.exists(dir)
#fakedir : False / dir = True

 

os.path.isdir(디렉터리 경로) : 디렉터리가 존재하는지 확인

존재할 경우 True, 존재하지 않을 경우 / 디렉터리 경로가 아닐 경우 False 반환

dir2 = 'C:\Program Files\Python39'
dir3 = 'Foo/Bar'
os.path.isdir(dir2)
os.path.isdir(dir3)
#dir2 : True / dir3 : False

 

os.path.isfile(파일 경로) : 파일이 존재하는지 확인

존재할 경우 True, 존재하지 않을 경우 / 파일경로가 아닐 경우 False 반환

dir = __file__
dir2 = 'C:\Program Files\Python39'
os.path.isfile(dir)
os.path.isfile(dir2)
#dir : True / dir2 : False

 

os.path.dirname(경로) : 경로의 상위경로 반환

dir = 'C:\Program Files\Python39'
os.path.dirname(dir)
#C:\Program Files

 

os.path.join(합칠경로1, 합칠경로2) : 경로 합치기

os.path.join('A','B','C')
#A\B\C

 

os.path.expanduser('~') / os.getenv('userprofile') : 홈 디렉토리 경로 얻기

둘다 결과는 똑같음

os.path.expanduser('~')
os.getenv('userprofile')
#C:\Users\PLAYHOOS

 

glob.glob

 

glob.glob(경로/설정) : 경로 내의 설정한 폴더/파일 리스트를 가져옴

설정에 따라서 하위폴더만 / 특정 파일만 가져올 수 있음

 

하위의 모든 폴더/파일 가져오기

#dir : 폴더경로
glob.glob('dir/*')

 

하위의 폴더만 가져오기

glob.glob('dir/**/')

 

하위의 하위폴더들까지 가져오기

glob.glob('./**/', recursive=True)

 

하위의 특정 확장자만 가져오기

glob.glob('dir/*.py')

 

특정 확장자 파일 하위의 하위폴더들까지 찾아서 가져오기

glob.glob('dir/**/*.py', recursive=True)
#['dir\\test.py', 'dir\\ui.py', 'dir\\subdir\\t2.py']

 

특정 문자열을 포함하는 결과 찾기

glob.glob('dir/[0-9]*')
#['dir\\2.txt']

 

특정 길이 문자 찾기(길이수만큼 ? 넣기)

glob.glob('dir/?.*')
#['dir\\2.txt']

 

shutil

shutil.rmtree(폴더경로) : 해당 경로 폴더 삭제

shutil.rmtree(dir)

 

shutil.move(옮길대상, 옮길위치) : 파일/폴더 옮기기

폴더를 옮길 경우 폴더 안의 내용물도 같이 옮겨집니다.

옮길폴더가 없는 폴더라면, 원래폴더의 이름이 바뀌는 것과 똑같은 결과가 나타납니다.

예) shutil.move('AA', 'BB') / BB가 있다면 결과는 BB/AA 가 되지만 없다면 AA->BB 가 됩니다.

#파일 옮기기
shutil.move(옮길파일, 옮길폴더)

#폴더 옮기기
shutil.move(원래폴더, 옮길폴더)

 

shutil.copy(복사할 파일명, 복사할 위치) : 파일을 특정 위치로 복사하기

복사할 위치에 동일한 파일이 있을 경우 파일이 덮어씌워지니 주의하세요

 

shutil.copy('dir/2.txt', 'dir/bb')​

 

shutil.copytree('복사할폴더명', '복사될폴더명') : 폴더를 특정 위치로 복사하기

복사할 위치에 동일한 폴더가 있을 경우 오류가 발생합니다.

하위 파일들도 전부 복사됩니다.

shutil.copytree('dir/bb', 'dir/aa')

 

반응형

댓글

💲 추천 글