os 모듈은 OS에 의존하는 다양한 기능을 제공하는 모듈입니다.
os 모듈을 사용하여 파일이나 디렉토리를 조작할 수 있으며, 파일의 목록이나 path 를 얻거나 새로운 파일 혹은 디렉토리를 작성하는 것도 가능합니다.
현재 인프런에서 수강하고 있는 파이썬 강의 강사님께서 파이썬의 os 모듈은 많이 활용되고 중요하니 알아두어야 한다는 말씀에 주로 사용되는? 주요 메서드를 정리해보고자 포스팅을 진행하였습니다.
1. os.walk()
os.walk()는 파일이나 디렉토리의 목록을 얻는 함수이다.
인자값으로 디렉토리명을 지정하여 파일이나 특정 확장자의 목록, 파일 경로를 얻을 수 있다.
우선, 디렉토리의 구조는 다음과 같습니다.
현재 작업중인 디렉토리는 python_workspace 이며 source 디렉토리 내부의 파일과 디렉토리들을 가져오는 예제로 작성하겠습니다.
os.walk() 함수 인자값으로는 디렉토리명을 넣어주었는데, 아래 코드는 source 디렉토니 내부에 존재하는 파일과 디렉토리를 반환하는 코드입니다.
os 모듈을 사용하기 위해서는 단순하게 'import os' 해주시면 되며, walk 함수의 결과로 'generator object' 를 반환하기 때문에 반복을 통하여 하나씩 꺼내올 수 있습니다.
import os
dirs = os.walk("./source/")
for d in dirs:
print(d)
아래 결과를 보시면 결과가 3줄로 출력된 것을 볼 수 있습니다.
첫 줄에는 source 디렉토리 내부에 존재하는 디렉토리와 파일들을 출력하였습니다.
첫 줄의 두번째 리스트 요소를 보시면 ['sub1', 'sub2'] 로 적혀있는 것을 볼 수 있는데, 이것은 인자로 넘겨준 해당 디렉토리에 존재하는 디렉토리들을 의미합니다.
두 번째 세 번째 줄의 결과는 그 내부 디렉토리들의 파일들을 출력 결과입니다.
두 세 번째의 두 번째 리스트 결과에는 [] 으로 출력되는것을 확인할 수 있는데
이는 내부 디렉토리가 존재하지 않음을 의미합니다.
[결과]
os.walk 함수를 조금 더 응용해보겠습니다.
위에서 출력 결과에서 살짝 언급하였듯이 한 줄에 세개의 리스트를 출력하게 됩니다.
[현재 경로] , [내부 디렉토리들], [내부 파일들] 형식으로 출력받게 되는데요
이를 활용하여 아래 코드와 같이 for 문에서 3개의 변수로 값을 받아 파일의 경로를 반환받을 수 있습니다.
import os
dirs = os.walk("./source/")
for curDir, dirs, files in dirs:
for f in files:
print(os.path.join(curDir, f))
해당 글 아래에서 언급할 os.path() 함수를 사용하였습니다.
우선, 여기서 간단하게 설명하자면 운영 체제에 따라 적합한 경로 구분자를 사용하여 경로를 경합해주는 함수입니다.
첫 번째 인자값인 현재 경로와 두 번째 인자값으로 전달한 파일명을 붙여 출력하여 줍니다.
[결과]
2. os.listdir()
os.listdir() 함수는 파일이나 디렉토리의 목록을 확인하기 위해 사용됩니다.
파일의 목록을 얻고 싶은 경우 해당 함수를 사용할 수 있습니다.
'walk 함수와 똑같은거 아니냐?' 라고 생각할 수 있기에 아래 코드와 결과를 보시면 차이점을 이해하기 쉬울 것 입니다.
listdir() 함수도 walk() 함수와 동일하게 인자로 경로를 전달해주면 됩니다.
import os
dirs = os.listdir("./source/")
for d in dirs:
print(d)
walk() 함수와 달리 인자로 전달받은 경로 내부의 존재하는 파일 및 디렉토리 명만 출력하고 있습니다.
[결과]
3. os.path()
이 글에서 처음으로 소개했던 함수인 walk() 에서 살짝 사용했던 함수입니다.
os.path() 함수는
'파일이나 디렉토리의 존재 확인', '지정한 경로의 파일명을 취득', '경로나 파일명의 결합' 등의 용도로 사용합니다.
아래 표는 os.path() 에서 자주 사용되는 메소드 목록입니다.
exists() | 파일 및 디렉토리의 존재를 확인할 수 있다. return 값은 Bool형 |
isdir() | 디렉토리의 존재여부를 확인할 수 있다. return 값은 Bool형 |
isfile() | 파일의 존재여부를 확인할 수 있다. return 값은 Bool형 |
basename() | 지정된 경로의 파일명을 리턴한다. |
dirname() | 지정된 경로로부터 파일명을 제외한 것을 리턴한다. |
split() | 지정된 경로의 파일명과, 그 경로를 리턴한다. |
splitext() | 지정된 파일의 확장자와 확장자를 제외한 파일명까지의 경로를 리턴한다. |
join() | 경로와 파일명 등을 결합한다. |
위 메소드 자체가 이해하기 어려운 메소드는 아니기때문에, 몇 가지만 예시로 들어보자.
- exists() : 파일 및 디렉토리의 존재를 확인
import os
# 존재하는 디렉토리
result1 = os.path.exists("./source")
print('result1 : ', result1)
# 존재하지 않는 디렉토리
result2 = os.path.exists("./sssooource")
print('result2 : ', result2)
[결과]
- isfile() : 파일의 존재여부를 확인
import os
# 존재하는 파일
result1 = os.path.isfile("./source/file1.txt")
print('result1 : ', result1)
# 존재하지 않는 파일
result2 = os.path.isfile("./source/file10.txt")
print('result2 : ', result2)
[결과]
- splittext() : 지정된 파일의 확장자와 확장자를 제외한 파일명까지의 경로 리턴
import os
d1 = os.path.splitext("./source/file1.txt")
print('d1 : ', d1)
[결과]
- join() : 경로와 파일명 등을 결합
import os
d1 = os.path.join("./source", "file1.txt")
print('d1 : ', d1)
[결과]
4. os.mkdir() & os.rmdir()
os.mkdir()을 사용하여 디렉토리를 생성할 수 있으며, os.rmdir()를 사용하여 디렉토리를 삭제할 수 있습니다.
여기서 인지하고 있어야 하는 부분은 rmdir() 함수는 비어있는 디렉토리만 삭제할 수 있습니다.
import os
# 현재 sub3 라는 디렉토리는 존재하지 않음
isSub3 = os.path.isdir("./source/sub3")
print('isSub3 존재 여부 : ', isSub3)
# sub3 디렉토리 생성
os.mkdir('./source/sub3')
print("sub3 디렉토리 생성완료!")
# 현재 sub3 라는 디렉토리는 존재한다.
isSub3 = os.path.isdir("./source/sub3")
print('isSub3 존재 여부 : ', isSub3)
# sub3 디렉토리 삭제
os.rmdir("./source/sub3")
print("sub3 디렉토리 삭제완료!")
# 현재 sub3 라는 디렉토리는 존재하지 않음
isSub3 = os.path.isdir("./source/sub3")
print('isSub3 존재 여부 : ', isSub3)
[결과]
이 외에 파일 및 디렉토리 관리에 사용되는 함수 몇가지가 존재합니다.
- os.remove() : 파일 삭제하기
특정 파일을 삭제할 때 사용하는 함수입니다.
os.remove("./source/test1.txt")
- os.rename() : 파일 및 디렉토리 이름 변경하기
파일 또는 디렉토리의 이름을 변경할 때 사용하는 함수입니다.
os.rename("./source/oldText.txt", "./source/newText.txt")
- os.getcwd() : 현재 작업 디렉토리 가져오기
현재 작업중인 디렉토리를 반환하는 함수입니다. 이는 프로그램이 현재 어디에 위치하고 있는지 알아내는데 유용합니다.
print(os.getcwd())
5. os.environ()
os.environ() 함수는 환경변수를 취득하거나, 읽어들이거나 쓰기 위해 사용합니다.
환경변수란 시스템이 참고하고 있는 공통의 변수로, 시스템에 관련된 데이터나 공통으로 사용하는 파일의 경로 등을 저장하기 위해 사용합니다.
import os
# 환경변수 전체 가져오기
print(os.environ)
# 특정 환경변수 가져오기
print(os.environ['PATH'])
결과는 저의 사생활이기 때문에, 각자 실행해서 확인해보시기 바랍니다.
'Python' 카테고리의 다른 글
[Python] 파이썬으로 JSON 데이터를 다루는 방법 (0) | 2025.01.29 |
---|---|
[Python] 일급 함수 정의와 특징 (0) | 2025.01.25 |
[Python] Namedtuple 사용방법 (1) | 2025.01.22 |
[Python] glob 모듈을 사용하여 파일 탐색하기 (0) | 2025.01.20 |
[Python] map() filter() reduce() 사용법 정리 (0) | 2025.01.17 |