os 모듈은 OS 즉 운영체제와 관련된 모듈이다.

 

폴더(디렉토리)를 조작하는 방법에 대하여 알아본다. 윈도우10 기준이다.

 

import os

os.chdir('D:\\pyprj')

print('* current directory: ')
cdr = os.getcwd()
print(cdr)

os.chdir 디렉토리를 바꾼다. 인수에 'D:\\pyprj' 에서 백슬레시가 두개 들어간다. 파이썬에서 윈도우의 디렉토리 계층을 구분할 때는 백슬레시를 두개 사용한다. 리눅스는 슬래시 하나이다. 언뜻 헷갈리기 쉽다. 사람들이 MS에 대해 불평하는 이유중의 하나이다. 리눅스의 사용자들은 경로의 표준적인 표기가 / 슬래시 하나라고 생각한다. MS가 당시 자사 제품의 차별화를 위해서 일부러 바꾸고 결국 윈도우가 시장을 장악하다 보니 현재는 두개가 혼용이 되고 있다.

 

지금은 MS도 오픈소스를 추구한다고 하니까...(그들의 말에 따르면) 조금 후회하고 있을지 모른다. 오픈소스에서는 이런 작은 것들이 다른 플랫폼에 이식하는데 걸림돌이 된다. 윈도우즈는 \\ <- 이스케이프 문자를 \n 이렇게 쓰기 때문에 백슬레시를 두개 써야 한다. 반면 리눅스는 슬래시를 쓰기 때문에 그럴 필요가 없다. 리눅스에서  / 이렇게 써도 이스케이프 문자 \n 과는 구분이 된다.

 

os.getcwd() -> cwd 는 current working directory 현재 작업중인 경로를 반환한다.

 

import os

os.chdir('D:\\pyprj')
print(os.getcwd())
print(os.mkdir('.\\folder1'))
print(os.path.abspath('.'))
print(os.getcwd())
print(os.path.abspath('.\\folder1'))
print(os.path.isabs('.'))
print(os.path.isabs(os.path.abspath('.')))
print(os.path.isabs(os.getcwd()))

 

os.mkdir 는 폴더를 생성한다. 폴더가 생성되면 현재 작업 디렉토리가 변한다는 점에 주의한다.

 

os.path.abspath('.') 는 절대 경로를 반환하는데 . 도트 표시는 현재 디렉토리에서 절대경로를 알고 싶다는 뜻이다.

 

\\ 백슬래시를 항상 두개씩 붙이는 것이 주의한다.

 

isabs 메소드는 is absolute 절대 경로이냐? 라는 질문이다. . 도트는 절대경로가 아니다.

 

 

path = 'c:\\windows\\system32\\calc.exe'
print(os.path.dirname(path))
print(os.path.basename(path))
print(os.path.split(path))
print(path.split(os.path.sep))
print(os.path.sep)

파일의 경로와 이름을 분리할 수 있다. dirname은 경로이고 basename은 파일명이다(확장자 포함) split 메소드를 사용하면 다시 잘게 분리할 수 있다.

 

print(os.path.relpath('C:\\windows','c:\\'))
print(os.path.relpath('C:\\windows','c:\\library'))

relpath는 relative path 상대경로이다. 두 경로의 상대경로를 구한다.

 

path = 'D:\\Programming\\CPrimer\\'
print('a.exe file size : ',os.path.getsize(path + 'a.exe'),'byte')

list = os.listdir(path)
for i in range(len(list)):
    print(i," : ",list[i],end='\n')
    if (i+1) % 10 == 0:
        print('... etc')
        break

getsize 메소드로 파일의 사이즈를 얻을 수 있다.

 

os.listdir 은 디렉토리안의 모든 파일을 리스트의 형식으로 리턴한다.

 

path = 'D:\\Programming\\CPrimer\\'
totalSize = 0
i = 0
for filename in os.listdir(path):
    size = os.path.join('D:\\Programming\\CPrimer\\',filename)
    print('File {2:>3} : {0:>20} {1:>10}  Bytes'.format(filename,os.path.getsize(size),i))
    totalSize = totalSize + os.path.getsize(size)
    i += 1

print('\n-------------------------------------------------')
print("total : ", totalSize, " Bytes" )

 

디렉토리의 파일들을 가져와서 파일의 크기를 구하고 정렬시키는 코드이다. cmd 의 dir 출력과 비슷하다.

 

os.path.join 으로 파일의 경로를 합치는 부분 정도를 체크하면 될 것 같다.

 

이외에도 여러가지 메소드가 있다. 자세한 사항은 python documentation 을 활용한다.

 

 

os.path — Common pathname manipulations — Python 3.8.6 documentation

os.path — Common pathname manipulations Source code: Lib/posixpath.py (for POSIX) and Lib/ntpath.py (for Windows NT). This module implements some useful functions on pathnames. To read or write files see open(), and for accessing the filesystem see the o

docs.python.org

 

공유하기

facebook twitter kakaoTalk kakaostory naver band