디렉토리(폴더) 만들기
os.mkdir으로 디렉토리를 생성
제일 간단하게 단일의 디렉토리를 생성하는 방법에 대해 알아보자. 아래의 예에서는 현재 디렉토리에 "dir_01"이라는 서브 디렉토리를 만들고 있다.
os.mkdir(’dir_01’)
# 혹은
os.mkdir(‘./dir_01’)
그리고 다음은 예에서는 루트 디렉토리 바로 아래에 있는 tmp라는 디렉토리에 dir_01이라는 디렉토리를 생성하고 있다.
os.mkdir(‘/tmp/dir_01’)
첫 번째 예에서 보았듯 현재 위치한 디렉토리에 따라 작성되는 디렉토리 생성 위치가 다르므로 주의해야할 필요가 있다. 현재 디렉토리와 관계없이 디렉토리를 생성하고 싶은 경우 반드시 루트 디렉토리를 지정하는 "/"에서 부터 디렉토리 생성 위치를 지정할 필요하다.
os.makedirs로 중첩된 디렉토리를 한 번에 작성하기
디렉토리 안에 디렉토리 즉 중첩된 디렉토리 구성을 한 번에 작성하고 싶은 경우에는 아래의 메소드를 사용한다.
os.makedirs(‘dir_01/dir_02/dir_03’)
이 메소드에서는 맨 끝의 dir_03디렉토리를 만들기 위해서는 반드시 중간 디렉토리(여기서는 dir_01, dir_02)가 존재해야하므로 없다면 자동적으로 생성해준다.
디렉토리에 권한(퍼미션) 부여하기
python으로 디렉토리의 소유자나 소속 그룹, 다른 유저 그에 따른 권한 등의 속성을 지정할 수 있다. 참고로 새로운 파일이나 디렉토리가 생성되면 소유자나 소속 그룹은 현재의 유저와 그 유저의 소속 그룹이 된다.
os.chmod로 권한 부여하기
python에서는 chmod 메소드로 권한을 부여할 수 있다.
os.chmod(path, mode,…)
- path : 권한 설정할 디렉토리
- mode : 권한 설정 값
mode는 보통 8진수(원래는 0로 시작하지만 python3에서는 0o로 표기해야한다)로 작성하며, 3번째 숫자부터 왼쪽에서 순서대로 소유자, 그룹, 다른 유저의 권한을 의미한다. 자세한 설명은 퍼미션에 관련된 포스팅을 참고하길 바란다.
예를 들면 다음과 같다.
os.chmod(‘dir_01/dir_02/dir_03’, 0o644)
- 소유자 : 6 (읽기, 쓰기 권한)
- 그룹 : 4 (읽기 권한)
- 다른 유저 : 4 (읽기 권한)
각 종 권한 값의 의미는 다음과 같다.
0 —
1 —x
2 -w-
3 -wx
4 r—
5 r-x
6 rw-
7 rwx
r 읽기 권한
w 쓰기 권한
x 실행 권한
디렉토리가 존재하지 않을 때에만 mkdir하기
한 번 디렉토리가 작성된 뒤 동일한 코드를 한 번 더 실행시키면 에러가 발생한다. 이 에러를 피하기 위해서는 크게 세 가지 방법이 존재한다.
- 디렉토리가 이미 존재하고 있는지 아닌지를 체크한 뒤 없을 때에만 디렉토리를 생성하게 코딩하기
- os.mkdir() 메소드에 exit_ok = True 옵션을 지정하여 에러를 제약하는 방법
- 에러를 try로 핸들링하는 방법
디렉토리의 존재여부를 확인하는 방법은 다음과 같다.
if os.path.isdir(“mydir”)==False:
os.mkdir(‘dir_01’)
exist_ok = True 옵션을 지정하는 방법은 다음과 같다.
os.mkdir(‘dir_01’, exist_ok=True)
마지막으로 try문으로 에러를 핸들링하는 방법은 다음과 같다.
try:
os.mkdir(‘dir_01’)
except FileExistsError as e:
pass # 에러를 무시한다.
참고자료
'IT > 언어' 카테고리의 다른 글
[PHP] PHP 기초 중의 기초 문법 (0) | 2022.04.18 |
---|---|
[python] 0이 없는 문자형(str) 숫자 데이터 리스트 제대로 정렬하기 (1, 10, 11 정렬 문제 해결) (0) | 2022.03.10 |
[python] python으로 csv파일 쓰기 (list, numpy, pandas) (0) | 2022.02.21 |
[python/Matplotlib] 3차원 데이터 가시화(표시) (0) | 2022.01.17 |
[python/Open3D] open3D를 사용해 point cloud를 메쉬로 생성하기 (0) | 2022.01.15 |