본문 바로가기
기술스택을 쌓아보자

[python/파이썬] os.mkdir()과 os.makedirs(): 하위 디렉토리까지 포함하여 원하는 경로 만들기

by 소리331 2020. 9. 13.
반응형

일반적으로 파이썬에서 경로를 생성할때 os모듈의 mkdir을 사용하는데요, 

In[4]: import os
  ...: os.mkdir("/home/PycharmProjects/test2")

위의 경로에서 /home/PycharmProjects까지는 기존 존재하던 경로고,test가 새로 생성하는 경로입니다.

그러나 가끔 경로를 만들다보면, 새로 만들고자하는 경로 아래에 새로운 하위폴더를 생성하고 싶은 경우가 있습니다. 그럴때 os.mkdir을 똑같이 사용하면  아래와 같은 FileNotFoundError에러가 발생합니다.

import os
os.mkdir("/home/PycharmProjects/test/test/test")

#에러!!!
Traceback (most recent call last):
  File "/opt/conda/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2910, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-2-acbe12b7d5bc>", line 2, in <module>
    os.mkdir("/home/PycharmProjects/test/test/test")
FileNotFoundError: [Errno 2] No such file or directory: '/home/PycharmProjects/test/test/test'

 

그리고 디렉토리가 이미 존재하면, FileExistError가 발생하기 때문에 미리 있는지, 없는지 if문을 이용해 확인하시는 분들이 있으신 건 같습니다.

 

이럴 때에는, os.makedirs를 사용하면 하위 디렉토리까지 모두 생성할 수 있습니다!

import os
os.makedirs("/home/hoseung2/PycharmProjects/test/test/test")

짜잔! 하위폴더 까지 모두 생성되었다.

추가로 좀 더 설명을 드리자면, os.makedirs()는 재귀적 디렉토리 생성함수로, mkdir()과 유사하지만, 가장 하위의 디렉토리를 생성하기 위해 필요한 중간 디렉터리를 모두 생성합니다. 그리고 생성하고자 하는 경로가 이미 있을 경우, exist_ok의 디폴트 값이 False이기 때문에 FileExistError가 발생하지만, 이를 True로 설정해주면, 디렉토리가 이미 있어도 에러를 발생시키지 않습니다. 이는 파이썬 버전 3.2부터 추가되었습니다! 그런데 각 파이썬 버전마다, exist_ok에 대한 변경사항이 조금씩 있어서, 사용하시는 파이썬 버전에 따라 아래 내용을 확인해보시면 좋을 것 같습니다.

버전 3.2에 추가: exist_ok 매개 변수.
버전 3.4.1에서 변경: 파이썬 3.4.1 이전에는, exist_ok 가 True이고 디렉터리가 존재한다면, mode 가 기존 디렉터리의 모드와 일치하지 않을 때, makedirs()는 여전히 에러를 발생시킵니다. 이 동작은 안전하게 구현할 수 없으므로, 파이썬 3.4.1에서 제거되었습니다. bpo-21082를 참조하십시오.
버전 3.6에서 변경: 경로류 객체를 받아들입니다. (Posixpath류라고 생각하시면 될듯!)
버전 3.7에서 변경: mode 인자는 더는 새로 만들어지는 중간 수준 디렉터리의 파일 권한 비트에 영향을 주지 않습니다.

 

 

출처는 어디겡 : 파이썬 공식문서

docs.python.org/ko/3/library/os.html?highlight=os#os-file-dir

 

삥빵뽕

반응형

댓글