파이썬으로 스크립트를 작성하면서 파일 시스템에 접근하는 경우가 많다. 파일 시스템에서 파일과 디렉토리를 생성하거나 삭제하는 방법에 대해 정리해보겠다.
파일 생성
파일을 쓰기모드로 열면, 경로에 해당하는 파일이 없을 때 생성된다.
f = open('test.txt', 'w')
f.close()
주의할 점은 'w' 모드로 파일을 열게 되면 이미 존재하는 파일의 내용을 덮어쓰게 된다는 점이다. 따라서 다음과 같이 만들어주면 된다.
if os.path.isfile('test.txt'):
f = open('test.txt', 'w')
else:
f = open('test.txt', 'a')
디렉토리 생성
디렉토리를 생성하기 위해서는 os 모듈의 mkdir() 함수를 사용하면 된다.
os.mkdir('myDir')
다른 함수와 마찬가지로 mkdir() 함수도 상대경로와 절대경로를 인자로 넘길 수 있다. 상대경로를 입력하면 현재 작업 디렉토리를 기준으로 상대경로를 적용해서 생성한다.
참고로 현재 작업 디렉토리는 os 모듈의 getcwd() 함수를 이용해 알 수 있다.
current_working_directory = os.getcwd()
print("현재 작업 디렉토리 : " + current_working_directory)
# 현재 작업 디렉토리 : /home/user
만약 인자로 넘겨준 경로에 이미 다른 파일이나 디렉토리가 존재한다면 에러가 발생한다.
만들고 싶은 경로에 디렉토리를 여러개 만들고 싶은 경우가 있다. 예를 들어 "dir1/dir2/dir3" 라는 디렉토리를 만들고 싶은 경우를 생각해보자. 일단 dir1 부터 만들고, dir1/dir2를 만들고, dir1/dir2/dir3를 만들어야 한다. 매우 귀찮다. 이 때 쓸 수 있는 함수가 os 모듈의 makedirs() 함수다.
makedirs("dir1/dir2/dir3", exist_ok=True)
두 번째 인자인 exist_ok 인자가 False인 경우 입력한 모든 경로의 모든 디렉토리가 존재한다면 FileExistError가 발생한다. exist_ok 인자가 True인 경우 입력한 디렉토리가 존재하더라도 오류 없이 진행된다. exist_ok의 기본값은 False다.
파일 삭제
파이썬에서 파일이나 디렉토리를 삭제하기 위해서 os 모듈의 remove() 함수를 많이 사용한다.
os.remove(path)
만약 인자로 넘긴 경로에 파일이나 디렉토리가 존재하지 않는다면 FileNotFoundError가 발생한다. 만약 파일이 존재하는 경우에만 삭제하고 싶다면
if os.path.isfile(path):
os.remove(path)
이런식으로 조건을 주면된다.
만약 지정된 경로에 파일이 아니라 디렉토리가 있다면 IsADirectoryError가 발생한다.
디렉토리 삭제
그렇다면 디렉토리는 어떻게 삭제하는 것인지 궁금하다. 디렉토리는 os 모듈의 rmdir() 함수를 이용해서 삭제할 수 있다.
os.rmdir(path)
지우려는 경로가 파일이면 remove()를 호출하고, 디렉토리면 rmdir()을 호출하면 된다.
if os.path.isfile(path):
os.remove(path)
if os.path.isdir(path):
os.rmdir(path)
댓글