os모듈의 이것저것
import os
print(os.getcwd())
os.chdir('data')
print(os.getcwd())
c:\Users\MSI\PythonStudy
c:\Users\MSI\PythonStudy\data
현재 워킹 디렉토리 이동
import os
base_dir = os.getcwd()
os.chdir('data')
# 작업 수행
os.chdir(base_dir)
실무 패턴으로 getcwd와 함께 사용
import os
print(os.listdir())
os.rename('hello.py', 'bye.py')
print(os.listdir())
['data', 'hello.py', 'main.py']
['bye.py', 'data', 'main.py']
파일 또는 폴더의 이름을 변경해줌
import os
print(os.listdir())
os.rename('bye.py', 'data/bye.py')
print(f'current directory: {os.listdir()}\ndata directory: {os.listdir('data')}')
['bye.py', 'data', 'main.py']
current directory: ['data', 'main.py']
data directory: ['bye.py', 'data.csv', 'data_sample.csv']
이동도 가능
rename은 파일 내부 경로를 수정하는게 아니고 디렉토리 엔트리를 다른 디렉토리로 재연결하는 것
파일 데이터나 메타데이터는 변경되지않음
서로 다른 파일시스템(예: C:\, D:)라면 rename 불가
import os
for f in os.listdir('data'):
name, ext = os.path.splitext(f)
print(f'name:{name}\next:{ext}')
name:bye
ext:.py
name:data
ext:.csv
name:data_sample
ext:.csv
이름과 확장자명을 나눠주는 함수
import os
name, ext = os.path.splitext('a.b.c.d.py')
print(f'name:{name}\next:{ext}')
name:a.b.c.d
ext:.py
마지막 .을 기준으로 나눈다
import os
name, ext = os.path.splitext('.git')
print(f"name:{name}\next:{ext}")
name:.git
ext:
맨 앞 점은 확장자로 취급하지않음
import os
env = os.environ['PATH']
print(env)
environ은 현재 프로세스의 환경변수를 담고 있는 딕셔너리같은 객체
위처럼 key값을 통해 value를 가져올 수 있음
import os
env = os.environ['PATH']
dic = {
"name": "smith",
"age": 20
}
print(type(os.environ))
print(type(dic))
<class 'os._Environ'>
<class 'dict'>
진짜 딕셔너리는 아님
import os
env = os.environ['NOT_EXIST']
print(env)
Traceback (most recent call last):
File "c:\Users\MSI\PythonStudy\tempCodeRunnerFile.py", line 3, in <module>
env = os.environ['NOT_EXIST']
~~~~~~~~~~^^^^^^^^^^^^^
File "<frozen os>", line 716, in __getitem__
KeyError: 'NOT_EXIST'
없는 키값을 입력하면 에러가 뜸
import os
key = "NOT_EXIST"
env_default = os.environ.get(key)
env = os.environ.get(key, 'NOT FOUND')
print(env_default)
print(env)
None
NOT FOUND
get을 사용하면 에러없이 None 또는 직접 설정한 값을 리턴해서 더 안전
import os
os.environ["PATH"] = "123"
프로세스에서의 value 변경은 해당 프로세스와 자식 프로세스(subprocess)에게만 영향을 줌
프로세스 실행 후 os에서 환경변수를 변경해도 프로세스의 environ은 영향을 받지 않음
프로세스가 실행될때 os로부터 환경변수 복사본을 넘겨받아 프로세스에서 독립적으로 사용하기 때문
[디렉토리]
|------디렉토리 엔트리 ["hello.py" -> inode 1234]
|------디렉토리 엔트리 ["data" -> inode 5678]
디렉토리 엔트리는 파일 이름과 해당 파일을 식별하는 참조 정보(inode 번호 or MFT record 참조)를 포함
디렉토리는 이러한 디렉토리 엔트리들을 포함