[Document] OS

OS 모듈은 파이썬을 설치할 때 자동으로 설치되는 파이썬 라이브러리에 포함된다.
그리고 환경 변수나 디렉토리, 파일 등의 OS 자원을 제어할 수 있게 해주는 모듈입니다.

현재 작업 폴더 얻기

os.getcwd()를 사용하여 얻습니다. (get current working directory)

print(os.getcwd())
# D:\source\test

디렉토리 변경

os.chdir(path)를 사용합니다. (path는 문자열이어야함.)

os.chdir("C:\WINDOWS")
print(os.getcwd())
# C:\WINDOWS

시스템 명령어 호출하기

시스템 자체의 프로그램이나 기타 명령어를 파이썬에서 호출할 수도 있다. OS.system("")

os.system("ipconfig")
# Windows IP ����
#
#
# ���� LA

문자열이 깨져서 나온다.

실행한 시스템 명령어의 결과값 돌려받기

시스템 명령어를 실행한 결과값을 읽기 모드 형태의 파일 객체로 돌려준다.

f = os.popen("ipconfig")
print(f.read())
# [Windows IP 구성
#
#
# 무선 L ... ]

문자열이 잘나오네

디렉터리 생성

os.mkdir(디렉터리) 디렉터리를 생성한다.

os.mkdir("D:/source/test/test")

디렉터리 삭제

os.rmdir(디렉터리) 디렉터리를 삭제한다.단, 디렉터리가 비어있어야 삭제가 가능하다.

os.rmdir("D:/source/test/test")

파일 지우기

os.unlink(파일) 파일을 지운다.

os.unlink("D:/source/test/test.txt")

이름 바꾸기

os.rename(src, dst) src라는 이름의 파일을 dst라는 이름으로 바꾼다.

os.rename('d:/source/test/a.txt','v')

함수 설명

.path

  • 인터넷에 공유되어 있는 정보와 실행했을때의 다른점이 많아서, 그냥 예제로 설명하겠습니다.
  • 기준 위치 D:\source\CloudStation\AAT\config\log_class.py\padp.py

상대 경로에 대해 절대 경로 얻기

os.path.abspath(path)

print(os.path.abspath("."))
print(os.path.abspath(a))
print(os.path.abspath("../config/DB"))
# D:\source\CloudStation\AAT\DB
# D:\source\CloudStation\AAT\config\log_class.py\padp.py
# D:\source\CloudStation\AAT\config\DB

경로 중 디렉토리명만 얻기

os.path.dirname(path)

print(os.path.dirname(a))
print(os.path.dirname(os.path.dirname(a)))
print(os.path.dirname(os.path.abspath(os.path.dirname(a))))

---

print(os.path.abspath(a))
print(os.path.dirname(os.path.abspath(a)))
print(os.path.dirname(os.path.dirname(os.path.abspath(a))))
print(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(a)))))
# D:\source\CloudStation\AAT\config\log_class.py
# D:\source\CloudStation\AAT\config
# D:\source\CloudStation\AAT\config

---

# D:\source\CloudStation\AAT\config\log_class.py\padp.py
# D:\source\CloudStation\AAT\config\log_class.py
# D:\source\CloudStation\AAT\config
# D:\source\CloudStation\AAT

dirname()이 디렉토리명만 얻는다는 설명이 많은데, 사용해보면 그렇지 않다. 인자값으로 주어진 경로 중 마지막 경로를 제외한 나머지 경로를 반환한다.

경로 중 파일명만 얻기

os.path.basename(path)

print(os.path.basename(a))
# padp.py

경로 중 디렉토리명과 파일명 나누어 얻기

os.path.split(path) 디렉토리명, 파일명이 리스트 형태로 나옵니다.

dir = os.path.split(a)
print(dir)

dir, file = os.path.split(a)
print(dir, file, sep="\n")
# ('D:\\source\\CloudStation\\AAT\\config\\log_class.py', 'padp.py')

# D:\source\CloudStation\AAT\config\log_class.py
padp.py

dir 변수 한개일때는 .split을 사용했을때 튜플형식으로 값이 출력된다.
따라서 .split은 디렉토리명과 파일명, 이 두가지 값을 출력하므로 변수 두개를 주면(dir, file) 각 변수에 나눠서 입력된다.

sep=""의 경우 각 변수들 사이에 ""안에있는 이스케이프문자가 입력된다.
end=""는 문장을 출력하고 마지막에 이스케이프문자를 입력한다.

경로를 병합하여 새 경로 생성

os.path.join(path, path1, path2, ...) 넘겨준 path들을 묶어 하나의 경로로 만들어줍니다.

print(os.path.join(a, "test.txt"))
# D:\source\CloudStation\AAT\config\log_class.py\padp.py\test.txt

파일 혹은 디렉토리가 존재하는지 체크

os.path.exists(path)

print(os.path.exists("D:\source\\test"))
# True
print(os.path.exists("D:\source\\test\\os_test.py"))
# True

디렉토리가 존재하는지 체크

os.path.isdir(path)

print(os.path.isdir("D:\source\\test"))
# True
print(os.path.isdir("D:\source\\test\\os_test.py"))
# False

파일이 존재하는지 체크

os.path.isfile(path)

print(os.path.isfile("D:\source\\test"))
# False
print(os.path.isfile("D:\source\\test\\os_test.py"))
# True

파일의 크기

os.path.getsize(path)

print(os.path.getsize(__file__))
# 558

디렉토리 안의 파일/서브 디렉토리 리스트

os.listdir(path) path 하위에 있는 파일, 디렉토리 리스트를 보여줍니다.

print(os.listdir("D:\source\\test"))
# ['.git', '.idea', 'beautifulsoup_test.py', 'filename.txt', 'os_test.py', 'report.xls', 'requests_test.py', 'telegram_test.py', 'venv', '__pycache__']

참고문헌

[Python] 파이썬 파일과 디렉토리 경로, "https://itmining.tistory.com/122", [IT 마이닝]

[Python] os.path 모듈. 파일 경로 조작하기, "https://dololak.tistory.com/693", [코끼리를 냉장고에 넣는 방법]

점프 투 파이썬, "https://wikidocs.net/33", [박응용]

파이썬 os.path 모듈, "https://yeo0.github.io/pg/2018/11/21/%ED%8C%8C%EC%9D%B4%EC%8D%AC-os.path-%EB%AA%A8%EB%93%88/", [통계쟁이 엔지니어]

os — 기타 운영 체제 인터페이스, "https://docs.python.org/ko/3.8/library/os.html"

이 글이 도움이 되었나요?

신고하기
0분 전
작성된 댓글이 없습니다. 첫 댓글을 달아보세요!
    댓글을 작성하려면 로그인이 필요합니다.