디렉토리 다루기


 이번에는 디렉토리를 다루는 방법에 대해 알아보겠습니다. 리눅스를 써보신 분들은 함수이름이 리눅스 명령어와 상당히 비슷하다고 느껴져서 쉽게 사용 할 수 있을 것입니다.


- 디렉토리와 관련된 일반 작업


1) 현재 작업 디렉토리 알아보기
앞에서 공부할때 계속해서 사용했던 os모듈의 getcwd()함수입니다.

2) 작업 디렉토리 변경하기
os모듈의 chdir(경로명) 함수를 사용해서 작업하는 디렉토리를 바꿀 수 있습니다.
----------------------------------------------------------------------------------------
import os
print os.getcwd()
os.chdir('D:/PythonProject/Python/13')
print os.getcwd()
----------------------------------------------------------------------------------------
D:\PythonProject\Python\14
D:\PythonProject\Python\13
----------------------------------------------------------------------------------------

3) 디렉토리 만들기
 디렉토리는 os모듈의 mkdir() 함수로 만들 수 있고, 권한을 부여하면서도 만들 수 있습니다. 재귀적으로 여러개의 디렉토리를 만드는 함수는 makedirs() 함수 입니다.
----------------------------------------------------------------------------------------
import os

os.mkdir('temp')
os.mkdir('temp2',0700)
os.makedirs('make/test1/test2')

print os.listdir('.')
----------------------------------------------------------------------------------------
(실행 결과)
['dir.py', 'end.txt', 'file.py', 'inout.py', 'make', 'out2.py', 'pickle.py', 'pickle.pyc', 'pickle.txt', 't.txt', 'temp', 'temp2']
----------------------------------------------------------------------------------------

4) 디렉토리 삭제
 디렉토리 삭제하는 함수는 os모듈의 rmdir()함수로 디렉토리 안에 내용이 있으면 에러가 발생합니다. 아래 코드에서는 make가 빈 디렉토리가 아니므로 에러가 발생했습니다.
----------------------------------------------------------------------------------------
import os
os.rmdir('temp2')
os.rmdir('make')
----------------------------------------------------------------------------------------
(실행 결과)
Traceback (most recent call last):
  File "D:\PythonProject\Python\14\dir.py", line 15, in <module>
    os.rmdir('make')
WindowsError: [Error 145] : 'make'
----------------------------------------------------------------------------------------

5) 다단계 디렉토리 삭제
 다단계 디렉토리를 삭제하는 함수는 os모듈의 removedirs() 함수와 shutill.rmtree() 함수가 있습니다. removedirs()함수는 가장 안쪽 디렉토리부터 삭제하며, 디렉토리에 다른 파일이 있으면 삭제하지않고 중단하는 반면, rmtree()함수는 파일은 물론 하위 디렉토리까지 모두 한번에 삭제하므로 조심해서 사용할 필요가 있습니다.
----------------------------------------------------------------------------------------
os.removedirs(디렉토리)
shutil.rmtree(디렉토리)
----------------------------------------------------------------------------------------

6) 디렉토리 복사
 디렉토리 복사 역시 파일 복사와 마찬가지로 shutil모듈을 이용합니다. shutil 모듈의 copytree() 함수를 이용하면 디렉토리를 복사할 수 있습니다.
----------------------------------------------------------------------------------------
shutil.copytree(src_filepath, dest_filepath)
----------------------------------------------------------------------------------------

- 디렉토리(트리) 탐색


디렉토리 탐색은 os모듈의 walk(filepath)함수를 이용합니다. filepath 부터 시작해서 재귀적으로 모든 하위 디렉토리까지 탐색합니다. 탐색 시 발견하는 모든 파일에 대해 아래와 같은 튜플을 반환합니다.
----------------------------------------------------------------------------------------
(dirpath, dirnames, filenames)
- dirpath : 탐색하고 있는 디렉토리 경로
- dirnames : dirpath안에 존재하는 서브 디렉토리의 리스트
- filenames : dirpath안에 존재하는 파일 리스트
----------------------------------------------------------------------------------------

 아래 코드는 for-in 문을 이용해서 현재 작업중인 경로를 탐색해서 경로, 디렉토리 이름, 파일이름 순으로 출력을 해보는 코드입니다.
----------------------------------------------------------------------------------------
import os

for dirpath, dirname, filename in os.walk(os.getcwd()):
    print dirpath,dirname,filename
----------------------------------------------------------------------------------------
(실행 결과)
D:\PythonProject\Python\14 ['make', 'temp'] ['dir.py', 'end.txt', 'file.py', 'inout.py', 'out2.py', 'pickle.py', 'pickle.pyc', 'pickle.txt', 't.txt']
D:\PythonProject\Python\14\make ['test1'] []
D:\PythonProject\Python\14\make\test1 ['test2'] []
D:\PythonProject\Python\14\make\test1\test2 [] []
D:\PythonProject\Python\14\temp ['test1'] []
D:\PythonProject\Python\14\temp\test1 ['test2'] []
D:\PythonProject\Python\14\temp\test1\test2 [] []
----------------------------------------------------------------------------------------

출처 한국기술교육대학교 온라인평생교육원 파이썬프로그래밍




'언어 > Python' 카테고리의 다른 글

[파이썬] 람다 함수  (1) 2017.03.08
[파이썬] 함수  (0) 2017.03.06
[파이썬] 파일 다루기  (0) 2017.02.24
[파이썬] 파일 입·출력  (0) 2017.02.22
[파이썬] 사전  (0) 2017.02.19

+ Recent posts