Python os 모듈(chdir, rename, remove, splitext, environ)

LshDevLog·2026년 2월 20일

python

목록 보기
4/16
post-thumbnail

os모듈의 이것저것

chdir

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와 함께 사용


rename

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 불가


splitext

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:

맨 앞 점은 확장자로 취급하지않음


environ

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 참조)를 포함
디렉토리는 이러한 디렉토리 엔트리들을 포함

0개의 댓글