👨🏻‍💻

ch1 - 4. 파이썬 외장 함수

라이브러리란 파이썬 사용자들이 편의를 위해 만든 편리한 기능들을 말합니다. 파이썬은 매우 다양한 라이브러리를 가진 것이 큰 장점입니다. 이 장에서는 필수적이고 편리란 라이브러리를 배워보려고 합니다.

shutil

셸 유틸리티 라고도 불리며 파일처리에 대한 높은 수준의 작업을 제공합니다. 특히 파일을 복사,이동, 이름변경 및 제거등을 지원하는 기능이 제공됩니다.
 

shutil 모듈 사용하기

import shutil
shutil 모듈은 이미 파이썬에 내장되어 있으므로 따로 설치할 필요 없이 import 를 통해서 불러낼 수 있습니다.

파일 복사하기-shutil.copy(,)

 
첫 번째로 파일 복사하기입니다. 파일을 복사하기 위해 사용되는 함수는 shutil.copy(,)입니다. 이 예제에서 egg.txt라는 파일을 사용해 보았습니다.
shutil.copy('C:/workplace/egg.txt','C:/workplace/Temp') #workplace폴더의 egg.txt 를 workplace폴더의 Temp폴더 안으로 복사
이 경우 workplace폴더의 egg.txt 를 temp폴더로 복사할 수 있습니다.
참고로 터미널의 경로를 설정할 경우 파일명과 디렉터리명만 나열할 수 있습니다.
shutil.copy('C:/workplace/egg.txt','C:/workplace/eggcopy.txt') #egg.txt 파일을 eggcopy.txt라는 이름의 파일로 복사 #위치는 같음
이 경우에는 원본파일인 egg.txt의 복사본인 eggcopy.txt라는 새 파일이 생성됩니다. 실제 구성내용도 동일하게 복사됩니다.
shutil.copy('C:/workplace/egg.txt','C:/workplace/egg.txt') #파일 이름이 같다면 오류로 처리됨
한가지 유의할 점은 만일 파일 이름이 같다면 오류로 처리됩니다.

파일 이동하기-shutil.move(,)

 
파일 이동은 파일을 대상으로 잘라서 붙혀넣는 작업을 수행하는 것과 유사합니다. '파일 복사하기'에서는 원본 파일을 원래 위치에 그대로 두면서 파일의 복사본을 만드는 방법을 살펴봤습니다.
이번에는 파일을 원래 위치에서 제거함과 동시에 파일을 새 위치로 옮기는(잘라내기) 방법을 살펴보겠습니다. 이 작업은 shutil.move(,)  함수를 이용해 간단히 수행됩니다.
shutil.move('C:/workplace/egg.txt','C:/workplace/Temp')
이 경우 workplace 폴더 안에 있던 egg.txt는 Temp폴더 안으로 이동하게 됩니다.
만약 Temp 폴더 안에 동일한 이름(egg.txt)의 파일이 있다면 오류로 판단합니다.
shutil.move('C:/workplace/egg.txt','C:\workplace/NEW_egg.txt')
만약 egg.txt 를 NEW_egg.txt 로 이동시킨다면 같은 주소안에서는 기존파일(egg.txt)가 삭제되고 새로운 파일(NEW_egg.txt)이 생성됩니다.
 

디렉터리 복사하기-shutil.move()

지금까지는 각각의 파일을 이동,복사 하였지만 디렉터리 전체를 이동,복사시킬수도 있습니다. 디렉터리를 복사할때는 copytree함수를 사용합니다.
 
import shutil shutil.copytree('C:/workplace/Original','C:/workplace/Originalcopy')
Original 폴더의 복사본인 Originalcopy폴더가 생성(복사)됩니다. 여기서 주의할 점은 폴더경로 작성시 백슬래시(\)를 한 개가 아닌 두 개로(\\) 작성해주어야합니다.
 

파일과 디렉터리의 이름 바꾸기

그렇다면 파일과 디렉터리의 이름을 바꾸는 방법은 무엇이 있을까요?
위의 파일과 디렉터리 모두에 move() 함수를 적용할 경우 기존 파일/디렉터리는 더 이상 존재하지 않지만 내용이 같은 새로운 파일/디렉터리가 만들어진다고 언급한 바 있습니다. 이것은 파일/디렉터리의 이름을 변경하는 것과 같습니다.
 

파일과 디렉터리 삭제하기

shutil모듈에서는 파일을 삭제하는 기능을 가지고 있지 않습니다. 하지만 디렉터리를 삭제하는 함수인 rmtree()는 존재합니다. shutil을 통해서 삭제된 디렉터리는 휴지통에서 찾을 수 없으니 주의하여 사용하시기 바랍니다.
 
shutil.rmtree('C:/workplace/Originalcopy')
 
shutil은 os와 마찬가지로 파일과 디렉터리에 대한 작업(복사, 이동, 이름 바구기, 삭제)기능을 아주 쉽게 사용할 수 있도록 설정되어있습니다.
 

OS 모듈

파이썬은 기본적으로 다양한 모듈을 제공합니다. 그 중, 이번 장에서는 OS 모듈에 대해 소개합니다. OS 모듈은 운영체제(Operating System)에서 제공되는 여러 기능을 파이썬에서 수행할 수 있게 해줍니다. OS 모듈에서 제공하는 여러 기능을 알아봅시다.
 

| 디렉토리 확인 및 변경

 
  • os.getcwd()
import os os.getcwd()
os.getcwd() 함수는 현재 작업 디렉토리를 출력할 때 사용합니다. 위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
'/Users/yun/Desktop/python'
 
  • os.listdir()
os.listdir()
os.listdir() 함수는 특정 경로에 존재하는 파일과 디렉토리를 리스트로 반환할 때 사용합니다. 함수 인자를 전달하지 않을 경우 현재 작업 디렉토리에 존재하는 파일과 디렉토리 목록을 반환합니다.
['sample.xlsx', 'Untitled1.ipynb', '.DS_Store', 'Untitled3.ipynb', 'Untitled.ipynb', 'wine_dataset.csv', 'result_keywords.xlsx', 'Untitled2.ipynb', 'sample', '.ipynb_checkpoints']
 
os.listdir(".")
함수 인자로 "."을 전달할 경우 함수 인자를 전달하지 않을 경우와 동일하게 현재 작업 디렉토리에 존재하는 파일과 디렉토리 목록을 반환합니다.
['sample.xlsx', 'Untitled1.ipynb', '.DS_Store', 'Untitled3.ipynb', 'Untitled.ipynb', 'wine_dataset.csv', 'result_keywords.xlsx', 'Untitled2.ipynb', 'sample', '.ipynb_checkpoints']
 
os.listdir('/Users/yun/Desktop/python')
경로를 os.listdir() 함수의 인자로 전달하는 경우 해당 경로에 존재하는 파일과 디렉토리 목록을 구할 수 있습니다. 현재 작업 디렉토리의 경로를 전달할 경우 다음과 같이 함수 인자를 전달하지 않을 때와 동일한 결과를 출력합니다.
['sample.xlsx', 'Untitled1.ipynb', '.DS_Store', 'Untitled3.ipynb', 'Untitled.ipynb', 'wine_dataset.csv', 'result_keywords.xlsx', 'Untitled2.ipynb', 'sample', '.ipynb_checkpoints']
 
  • os.chdir()
os.chdir("../")
os.chdir() 함수는 작업 디렉토리를 변경할 때 사용합니다. 위 코드 실행 후 현재 작업 디렉토리에 존재하는 파일과 디렉토리 목록을 반환하는 os.listdir() 함수를 출력하면 다음과 같은 결과를 얻을 수 있습니다.
'/Users/yun/Desktop'
함수의 인자로 "../"을 전달한 결과, 이번 장에서 진행했던 '/Users/yun/Desktop/python' 경로의 상위 경로로 작업 디렉토리가 변경된 것을 확인할 수 있습니다.
 

| 디렉토리 생성 및 제거

 
  • os.mkdir()
os.mkdir("newdir")
os.mkdir() 함수는 새로운 작업 디렉토리를 생성할 때 사용합니다. 위 코드 실행 후 현재 디렉토리를 출력하는 실행하면 다음과 같은 결과를 얻을 수 있습니다.
[... 'newdir', ...]
만약 동일한 이름의 디렉토리가 이미 존재하는 경우, 다음과 같은 예외 메세지를 출력합니다.
FileExistsError: [Errno 17] File exists: 'newdir'
이 외에도, 권한이 없어 디렉토리를 생성하지 못하는 경우에도 예외 메세지가 출력됩니다.
 
  • os.makedirs()
인자로 전달된 디렉토리를 반복적으로 생성하기 위해서는 os.makedirs() 함수를 사용합니다. os.mkdir() 함수와 마찬가지로, 동일한 이름의 디렉토리가 존재할 경우와 권한이 없어 디렉토리 생성이 불가능한 경우 예외 메세지가 출력됩니다. 다음은 os.makedirs() 함수를 이용해 'newdir' 디렉토리 아래에 'newsubdir' 디렉토리를 생성하는 코드입니다.
os.makedirs("newdir/newsubdir")
'newdir' 디렉토리 아래에 'newsubdir' 디렉토리가 생성되었는지 os.listdir("./newdir") 함수를 이용해 확인할 수 있습니다. 함수에 대한 결과는 다음과 같이 출력됩니다.
['newsubdir']
 
  • os.rmdir()
os.rmdir() 함수는 생성된 빈 디렉토리를 삭제할 때 사용합니다. 아래는 빈 디렉토리인 'testdir' 를 삭제하는 코드입니다.
os.rmdir("testdir")
빈 디렉토리가 아닌 경우 삭제가 불가능합니다. 디렉토리 내에 빈 디렉토리가 존재해도 삭제가 되지 않습니다. 빈 디렉토리가 아닌 경우 다음과 같은 예외 메세지가 출력됩니다.
OSError: [Errno 66] Directory not empty: 'newdir'
 
  • os.removedirs()
인자로 전달된 디렉토리를 연쇄적으로 제거하기 위해서는 os.removedirs() 함수를 사용합니다. os.rmdir() 함수와 마찬가지로 빈 디렉토리가 아닌 경우 삭제가 불가능합니다. 다음은 os.removedirs() 함수를 이용해 'newdir' 디렉토리와 'newsubdir' 디렉토리를 함께 삭제하는 코드입니다.
os.removedirs("newdir/newsubdir")
디렉토리는 leaf 디렉토리부터 삭제됩니다. 위 코드를 실행하면 'newsubdir' 디렉토리가 삭제된 이후 'newdir' 디렉토리가 삭제됩니다.

OS 파일 다루기

OS Module

Operating System 의 약자인 'os' 는 파이썬에서 기본적으로 제공되는 모듈입니다. 운영체제에서 제공하는 여러 기능을 파이썬에서 수행할 수 있도록 해줍니다.

OS Method

OS Module 에서 자주 사용되는 Method 는 다음과 같습니다.
 
notion imagenotion image
 
이를 활용하여 특정 디렉터리에 들어있는 모든 한글파일들을 출력하는 코드를 작성한 것 입니다.
import os path = os.getcwd() # 현재경로를 출력합니다. print(path) # 현재경로의 하위폴더 및 파일목록을 리스트형태로 저장합니다. dir_list = os.listdir(path) # 현재경로의 하위폴더 및 파일의 개수를 출력합니다. print(len(dir_list)) # 한글파일만 출력합니다. for content in dir_list: if content.endswith('hwp'): print(content)
 
notion imagenotion image
이를 활용하여 특정 디렉터리에 들어있는 모든 한글파일들을 출력하는 코드를 작성한 것 입니다.
 

OS.PATH Method

notion imagenotion image
 

os.environ

os란 환경변수나 디렉터리 파일 등의 os 자원을 제어할 수 있는 모듈입니다. os.environ은 현재 시스템의 환경 변수 값들을 보여줍니다.
먼저 콘솔에 python이라고 입력하면 python 콘솔로 넘어갈 수 있습니다.
 
notion imagenotion image
파이썬의 파일을 생성 할 때 open() 내장함수를 사용합니다. 이 때 새성할 파일의 이름과 읽기 모드를 같이 입력해야합니다.
 
그리고 다음과 같이 입력하면 내 시스템 정보를 확인할 수 있습니다.
import os os.environ
 
이 함수는 환경변수에 대한 내용을 딕셔너리(dictonary) 형태로 리턴합니다.
 
notion imagenotion image
 
책에서는 다루지 않지만 또 다른 os 내 유용한 함수에 대해 적어놓았습니다. 한 번 학습해보는 것을 권장합니다.
 
notion imagenotion image

glob

개발을 하다보면 가끔 특정 디렉토리 내 모든 파일 이름을 알아야 할 때가 있습니다. glob는 디렉토리 내 파일을 읽어 리스트로 리턴합니다. 다음을 입력해 자신의 디렉토리에 있는 파일을 읽어봅시다.
import glob glob.glob("디렉토리 경로")
 
이 외에도 파이썬에는 편리한 라이브러리가 많습니다. 알아두면 편리하니 다음에 더 다양한 라이브러리에 대해 공부해 보면 도움이 될 것입니다.
 
 

그 외 알아야 할 함수

  • os
    • os.rename()
    • os.path.join()
    • os.path.basename()
    • os.path.dirname()
  • string
    • 'string'.split()
    • 'string'.replace()
    •