# [Document] OS

- Author: @mildsalmon
- Published: 2020-02-17
- Updated: 2021-07-29
- Source: http://blex.me/@mildsalmon/os
- Tags: python, document, 모듈, os

---

OS 모듈은 `파이썬을 설치할 때 자동으로 설치되는 파이썬 라이브러리`에 포함된다.<br>
그리고 환경 변수나 디렉토리, 파일 등의 OS 자원을 제어할 수 있게 해주는 모듈입니다.

# 현재 작업 폴더 얻기

os.getcwd()를 사용하여 얻습니다. (get current working directory)

```python
print(os.getcwd())
```

```
# D:\source\test
```

# 디렉토리 변경

os.chdir(path)를 사용합니다. (path는 문자열이어야함.)

```python
os.chdir("C:\WINDOWS")
print(os.getcwd())
```

```
# C:\WINDOWS
```

# 시스템 명령어 호출하기

시스템 자체의 프로그램이나 기타 명령어를 파이썬에서 호출할 수도 있다. OS.system("")

```python
os.system("ipconfig")
```

```
# Windows IP ����
#
#
# ���� LA
```

문자열이 깨져서 나온다.

# 실행한 시스템 명령어의 결과값 돌려받기

시스템 명령어를 실행한 결과값을 읽기 모드 형태의 파일 객체로 돌려준다.

```python
f = os.popen("ipconfig")
print(f.read())
```

```
# [Windows IP 구성
#
#
# 무선 L ... ]
```

문자열이 잘나오네

# 디렉터리 생성

os.mkdir(디렉터리)	디렉터리를 생성한다.

```python
os.mkdir("D:/source/test/test")
```

# 디렉터리 삭제

os.rmdir(디렉터리)	디렉터리를 삭제한다.단, 디렉터리가 비어있어야 삭제가 가능하다.

```python
os.rmdir("D:/source/test/test")
```

# 파일 지우기

os.unlink(파일)	파일을 지운다.

```python
os.unlink("D:/source/test/test.txt")
```

# 이름 바꾸기

os.rename(src, dst)	src라는 이름의 파일을 dst라는 이름으로 바꾼다.

```python
os.rename('d:/source/test/a.txt','v')
```


함수	설명


# .path

- 인터넷에 공유되어 있는 정보와 실행했을때의 다른점이 많아서, 그냥 예제로 설명하겠습니다.
- 기준 위치
	D:\source\CloudStation\AAT\config\log_class.py\padp.py

### 상대 경로에 대해 절대 경로 얻기

os.path.abspath(path)

```python
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)

```python
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)

```python
print(os.path.basename(a))
```

```
# padp.py
```


### 경로 중 디렉토리명과 파일명 나누어 얻기

os.path.split(path) 디렉토리명, 파일명이 리스트 형태로 나옵니다.

```python
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`을 사용했을때 튜플형식으로 값이 출력된다. <br>
따라서 `.split`은 디렉토리명과 파일명, 이 두가지 값을 출력하므로 변수 두개를 주면(dir, file) 각 변수에 나눠서 입력된다.

`sep=""`의 경우 각 변수들 사이에 `""`안에있는 `이스케이프문자`가 입력된다.<br>
`end=""`는 문장을 출력하고 마지막에 `이스케이프문자`를 입력한다.


### 경로를 병합하여 새 경로 생성

os.path.join(path, path1, path2, ...) 넘겨준 path들을 묶어 하나의 경로로 만들어줍니다.

```python
print(os.path.join(a, "test.txt"))
```

```
# D:\source\CloudStation\AAT\config\log_class.py\padp.py\test.txt
```

### 파일 혹은 디렉토리가 존재하는지 체크

os.path.exists(path)

```python
print(os.path.exists("D:\source\\test"))
```

```
# True
```

```python
print(os.path.exists("D:\source\\test\\os_test.py"))
```

```
# True
```



### 디렉토리가 존재하는지 체크

os.path.isdir(path)

```python
print(os.path.isdir("D:\source\\test"))
```

```
# True
```

```python
print(os.path.isdir("D:\source\\test\\os_test.py"))
```

```
# False
```


### 파일이 존재하는지 체크

os.path.isfile(path)

```python
print(os.path.isfile("D:\source\\test"))
```

```
# False
```

```python
print(os.path.isfile("D:\source\\test\\os_test.py"))
```

```
# True
```


### 파일의 크기

os.path.getsize(path)

```python
print(os.path.getsize(__file__))
```

```
# 558
```


# 디렉토리 안의 파일/서브 디렉토리 리스트

os.listdir(path) path 하위에 있는 파일, 디렉토리 리스트를 보여줍니다.

```python
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"
