Python OS 모듈

이 모듈은 운영 체제 종속적인 기능을 사용할 수 있는 이식 가능한 방법을 제공합니다.

Pathlib 대 OS 모듈

pathlib 모듈은 파일 이름 가져오기, 파일 확장자 가져오기, 파일을 수동으로 열지 않고 읽기/쓰기와 같이 여기에 나열된 것보다 훨씬 더 많은 기능을 제공합니다. 더 자세히 알고 싶다면 공식 문서를 참조하십시오.
둘 다에 대해 더 자세히 알아보려면 파일 및 디렉터리 경로 페이지를 참조하십시오.

Linux 및 Windows 경로

Windows 에서는 폴더 이름 사이의 구분 기호로 백슬래시 (\) 를 사용하여 경로를 작성합니다. macOS, Linux 및 BSD 와 같은 Unix 기반 운영 체제에서는 경로 구분 기호로 슬래시 (/) 가 사용됩니다. 코드가 다른 플랫폼에서 작동해야 하는 경우 경로를 연결하는 것이 까다로울 수 있습니다.

다행히 Python 은 os.path.join을 제공하여 이를 처리합니다.

import os

# OS 에 맞는 구분 기호를 사용하여 경로 구성 요소 연결
os.path.join('usr', 'bin', 'spam')
usr\bin\spam

경로를 연결하는 것은 동일한 디렉터리 아래에 다른 파일 경로를 생성해야 할 때 유용합니다.

my_files = ['accounts.txt', 'details.csv', 'invite.docx']

# 각 파일 이름을 기본 디렉터리와 연결
for filename in my_files:
    print(os.path.join('/home/labex/project', filename))
/home/labex/project/accounts.txt
/home/labex/project/details.csv
/home/labex/project/invite.docx

현재 작업 디렉터리

import os

# 현재 작업 디렉터리 가져오기
os.getcwd()
/home/labex/project
# 현재 작업 디렉터리 변경
os.chdir('/usr/bin')

# 변경 사항 확인
os.getcwd()
/usr/bin

새 폴더 만들기

import os
# 디렉터리를 재귀적으로 생성 (필요한 경우 모든 상위 디렉터리 생성)
os.makedirs('/tmp/delicious/walnut/waffles')

절대 경로 대 상대 경로

파일 경로를 지정하는 두 가지 방법이 있습니다.

  • 절대 경로: 항상 루트 폴더로 시작합니다.
  • 상대 경로: 프로그램의 현재 작업 디렉터리에 상대적입니다.

또한 점 (.) 및 점 - 점 (..) 폴더도 있습니다. 이들은 실제 폴더가 아니라 경로에서 사용할 수 있는 특수 이름입니다. 폴더 이름의 단일 마침표 (“점”) 는“현재 디렉터리”의 약어입니다. 두 개의 마침표 (“점 - 점”) 는“상위 폴더”를 의미합니다.

절대 경로 처리

경로가 절대 경로인지 확인하려면:

import os
# 경로가 절대 경로인지 확인 (루트로 시작)
os.path.isabs('/')
True
# 상대 경로는 False 반환
os.path.isabs('..')
False

절대 경로를 추출할 수도 있습니다.

import os
# 먼저 현재 디렉터리 가져오기
os.getcwd()
/home/labex/project
# 상대 경로를 절대 경로로 변환
os.path.abspath('..')
/home

상대 경로 처리

시작 경로에서 다른 경로까지의 상대 경로를 얻을 수 있습니다.

import os
# 시작 경로에서 대상 경로까지의 상대 경로 가져오기
os.path.relpath('/etc/passwd', '/')
etc/passwd

경로 및 파일 유효성 검사

파일/디렉터리 존재 여부 확인

import os

# 경로 존재 여부 확인 (파일 또는 디렉터리)
os.path.exists('.')
True
os.path.exists('setup.py')
True
os.path.exists('/etc')
True
os.path.exists('nonexistentfile')
False

경로가 파일인지 확인

import os

# 경로가 파일인지 확인
os.path.isfile('setup.py')
True
os.path.isfile('/home')
False
os.path.isfile('nonexistentfile')
False

경로가 디렉터리인지 확인

import os

# 경로가 디렉터리인지 확인
os.path.isdir('/')
True
os.path.isdir('setup.py')
False
os.path.isdir('/spam')
False

파일 크기를 바이트 단위로 가져오기

import os

# 파일 크기를 바이트 단위로 가져오기
os.path.getsize('/usr/bin/python3')
776192

디렉터리 나열

import os

# 지정된 경로의 모든 파일 및 디렉터리 나열
os.listdir('/usr/bin')
['0409', '12520437.cpx', '12520850.cpx', '5U877.ax', 'aaclient.dll',
--snip--
'xwtpdui.dll', 'xwtpw32.dll', 'zh-CN', 'zh-HK', 'zh-TW', 'zipfldr.dll']

디렉터리 파일 크기

경고

디렉터리 자체에도 크기가 있습니다! 따라서 위 섹션에서 논의된 메서드를 사용하여 경로가 파일인지 디렉터리인지 확인하는 것이 좋습니다.

import os
total_size = 0

# 디렉터리 내 모든 파일의 총 크기 계산
for filename in os.listdir('/usr/bin'):
    # 디렉터리 경로와 파일 이름을 연결하고 크기 가져오기
    total_size = total_size + os.path.getsize(os.path.join('/usr/bin', filename))
print(total_size)
1117846456

파일 및 폴더 삭제

  • os.unlink(path)를 호출하면 해당 경로의 파일이 삭제됩니다.

  • os.rmdir(path)를 호출하면 해당 경로의 폴더가 삭제됩니다. 이 폴더에는 파일이나 폴더가 없어야 합니다.

디렉터리 트리 탐색

import os

# 디렉터리 트리를 재귀적으로 탐색
for folder_name, subfolders, filenames in os.walk('/tmp/delicious'):
    print(f'현재 폴더는 {folder_name}')
    # 하위 디렉터리 반복
    for subfolder in subfolders:
        print(f'{folder_name}의 하위 폴더: {subfolder}')
    # 파일 반복
    for filename in filenames:
        print(f'{folder_name} 내부 파일: filename{filename}')
    print('')
현재 폴더는 /tmp/delicious
/tmp/delicious의 하위 폴더: cats
/tmp/delicious의 하위 폴더: walnut
/tmp/delicious 내부 파일: spam.txt

현재 폴더는 /tmp/delicious/cats
/tmp/delicious/cats 내부 파일: catnames.txt
/tmp/delicious/cats 내부 파일: zophie.jpg

현재 폴더는 /tmp/delicious/walnut
/tmp/delicious/walnut의 하위 폴더: waffles

현재 폴더는 /tmp/delicious/walnut/waffles
/tmp/delicious/walnut/waffles 내부 파일: butter.txt

관련 링크

Morty Proxy This is a proxified and sanitized view of the page, visit original site.