tar 유틸리티는 원래 UNIX 운영체제를 위해 도입된 도구입니다. 여러 개의 파일을 하나의 아카이브 파일(흔히 tarball이라고 부름)로 묶어 파일 배포를 쉽게 만들어 주는 것이 목적입니다. 파이썬 표준 라이브러리의 tarfile 모듈에 포함된 함수들을 활용하면 tar 아카이브를 생성하고 필요할 때 tarball에서 파일을 추출할 수 있습니다. 아카이브는 gzip, bz2, lzma 압축 방식으로 만들 수도 있고, 압축 없이 생성할 수도 있습니다. 이 모듈에서 정의된 핵심 함수는 open()이며, 이 함수를 통해 tar 파일에
프로그램을 개발하다 보면 파일 시스템에 있는 파일 목록을 순회해야 하는 경우가 자주 발생하며, 특히 이름이 특정 패턴과 일치하는 파일들을 다뤄야 할 때가 많습니다. 파이썬의 glob 모듈은 특정 디렉터리 안의 파일 목록을 만들거나, 특정 확장자를 가진 파일을 찾거나, 파일 이름에 특정 문자열이 포함된 파일을 검색할 때 매우 유용하게 사용됩니다.glob 모듈의 함수들이 사용하는 패턴 매칭 방식은 유닉스(UNIX) 경로 확장 규칙을 따릅니다. 다만 이 모듈은 물결표(~)나 셸 변수는 확장하지 않는다는 점에 유의해야 합니다.glob 모듈
유닉스 셸 명령줄에서 사용하는 와일드카드 패턴은 정규 표현식(RegEx) 문법과는 다른 규칙을 따릅니다. 파이썬 표준 라이브러리의 fnmatch 모듈은 이러한 유닉스 스타일 와일드카드 패턴으로 파일 이름을 검사할 수 있는 기능을 제공합니다. fnmatch 모듈에는 다음과 같은 함수들이 정의되어 있습니다. 1. fnmatch() 이 함수는 파일 이름과 문자열 패턴, 두 개의 인자를 받습니다. 파일 이름이 주어진 패턴과 일치하면 True, 그렇지 않으면 False를 반환합니다. 다음 예제는 현재 디렉터리에서 *.py 패턴에 일치하는 모
파일 복사, 이동, 삭제, 압축처럼 반복적으로 수행해야 하는 파일 시스템 작업은 실무 개발에서 매우 자주 등장합니다. 파이썬(Python) 표준 라이브러리의 shutil 모듈은 바로 이런 고급(high-level) 파일 및 디렉토리 연산을 손쉽게 처리할 수 있도록 다양한 함수를 제공합니다.이 글에서는 shutil 모듈의 대표적인 함수들을 하나씩 살펴보고, 각 함수의 용도와 차이점을 코드 예제와 함께 정리해 드립니다.1. copy() – 파일 복사하기copy() 함수는 파일을 동일한 디렉토리 또는 다른 디렉토리의 지정된 위치로 복사합
ZIP은 압축과 보관(아카이빙)을 위해 가장 널리 사용되는 파일 형식 중 하나입니다. MS-DOS 시절부터 사용되어 왔으며, 유명한 PKZIP 프로그램에서도 이 형식을 채택했습니다.Python 표준 라이브러리의 zipfile 모듈은 ZIP 아카이브를 생성하고, 압축을 해제하며, 읽고 쓰는 작업을 손쉽게 처리할 수 있는 클래스들을 제공합니다. 이 글에서는 zipfile 모듈의 핵심 기능과 주요 메서드를 예제 코드와 함께 살펴보겠습니다.ZipFile() 객체 생성하기ZipFile() 함수는 파일 경로 문자열 또는 내장 open() 함수
파이썬 표준 라이브러리의 getpass 모듈에는 두 가지 함수가 정의되어 있습니다. 이 함수들은 터미널 기반 애플리케이션에서 사용자 자격 증명을 검증한 후에만 실행을 허용해야 할 때 매우 유용하게 사용됩니다.getpass() 함수getpass() 함수는 사용자에게 비밀번호를 입력하도록 요청하는 프롬프트를 표시합니다. 기본적으로 사용자가 터미널에서 입력하는 키는 화면에 표시(echo)되지 않습니다. 또한 터미널에 나타나는 기본 프롬프트 문구는 password이며, 문자열을 매개변수로 전달하면 원하는 문구로 변경할 수 있습니다.다음 예
Python의 cmd 모듈에는 Cmd라는 단 하나의 클래스만 포함되어 있습니다. 이 클래스는 사용자가 직접 정의하는 라인 지향(line-oriented) 명령줄 인터프리터 프레임워크의 기반 클래스(base class)로 활용됩니다. Cmd 클래스란? Cmd 클래스 또는 이를 상속한 서브클래스의 객체는 라인 지향 인터프리터 프레임워크를 제공합니다. 서브클래스가 상속받아 사용할 수 있는 주요 메서드는 다음과 같습니다. cmdloop() 메서드 cmdloop() 메서드는 객체를 무한 루프에 진입시키고, 사용자 입력을 받아 해당 입력에
파이썬 스크립트를 명령줄에서 실행할 때 인수를 전달해야 하는 경우가 매우 흔합니다. 그런데 필요한 매개변수가 개수, 타입, 순서 면에서 맞지 않으면 스크립트는 예외를 발생시킵니다. 바로 이럴 때 명령줄 인수를 제대로 파싱(구문 분석)하는 기능이 필요합니다.argparse 모듈이란?파이썬의 argparse 모듈은 사용하기 쉬운 명령줄 인터페이스(CLI)를 작성할 수 있는 도구를 제공합니다. 이 모듈은 sys.argv 리스트에 담긴 인수를 어떻게 해석할지 처리하고, 도움말 메시지를 자동으로 생성하며, 잘못된 옵션이 입력되면 오류 메시지
왜 0.1 + 0.2는 0.3이 아닐까?파이썬을 포함한 대부분의 프로그래밍 언어에서 부동 소수점(float) 숫자는 메모리에 2진법(binary) 분수 형태로 저장됩니다. 그 결과, 부동 소수점 연산은 때때로 직관에 어긋나는 결과를 내놓습니다. 가장 대표적인 예가 바로 다음과 같습니다.>>> 0.1 + 0.2 0.30000000000000004이것은 버그가 아니라 2진 부동 소수점 표현 방식의 본질적인 특성이며, 어떤 프로그래밍 언어에서든 마찬가지로 나타납니다. 파이썬은 이러한 문제를 해결하기 위해 빠르고 정확하게
대부분의 프로그래밍 언어와 마찬가지로 Python도 while과 for 문을 통해 반복문 구조를 제공합니다. 특히 for 문은 리스트, 튜플, 문자열 같은 이터러블(iterable) 객체를 순회할 때 매우 유용합니다. 그런데 Python의 표준 라이브러리에는 이보다 더 효율적이고 빠른 반복 도구를 담고 있는 itertools 모듈이 존재합니다. 이 모듈의 반복자 빌딩 블록들은 Haskell, SML 같은 함수형 프로그래밍 언어의 유사 도구들을 Python 스타일로 구현한 것입니다.itertools 모듈 함수의 세 가지 유형itert
파이썬 marshal 모듈이란?파이썬 표준 라이브러리의 marshal 모듈은 pickle 모듈과 유사한 객체 직렬화 기능을 제공합니다. 하지만 이 모듈은 일반적인 데이터 영속화(persistence)나 소켓을 통한 파이썬 객체 전송 같은 범용 목적에는 적합하지 않습니다.marshal 모듈은 주로 파이썬 자체적으로 컴파일된 모듈 파일(.pyc)을 읽고 쓰는 작업을 지원하기 위해 사용됩니다. 특히 주의할 점은 marshal 모듈이 사용하는 데이터 형식이 파이썬 버전 간 호환되지 않는다는 것입니다. 하위 버전 사이에서도 호환이 보장되지
프로그래밍에서 연산자(operator)란 덧셈, 뺄셈, 비교 등 특정 작업을 수행하기 위해 미리 정의된 기호(키)를 의미합니다. Python은 산술, 비교, 비트 단위, 멤버십 등 다양한 범주로 나뉜 방대한 내장 연산자 세트를 제공합니다. Python 표준 라이브러리의 operator 모듈은 이러한 내장 연산자에 대응하는 함수들로 구성되어 있습니다. 함수 이름은 해당 연산자의 종류와 유사하게 지어져 있어 직관적입니다. 예를 들어 operator 모듈의 add() 함수는 + 연산자에 대응합니다. 한편 Python의 Object 클래
객체 직렬화란 무엇인가?객체 직렬화(Object Serialization)는 객체의 상태를 바이트 스트림으로 변환하는 과정을 말합니다. 이렇게 생성된 바이트 스트림은 파일에 저장하거나 소켓 등을 통해 전송할 수 있습니다. 반대로 바이트 스트림에서 원래 객체를 복원하는 과정은 역직렬화(Deserialization)라고 부릅니다.파이썬에서는 직렬화를 피클링(pickling), 역직렬화를 언피클링(unpickling)이라는 용어로 지칭합니다. 파이썬 표준 라이브러리의 pickle 모듈은 직렬화를 위한 dump(), dumps() 함수와
pprint 모듈이란? pprint 모듈(lib/pprint.py)은 파이썬 표준 라이브러리에 포함되어 있어, 표준 파이썬 배포판과 함께 제공되며 별도의 설치 없이 바로 사용할 수 있습니다. pprint는 pretty printer(예쁜 출력기)의 약자로, 파이썬 데이터 구조를 시각적으로 보기 좋은 형태로 출력해 주는 기능을 담당합니다. 파이썬 인터프리터가 올바르게 해석할 수 있는 모든 데이터 구조는 pprint를 통해 깔끔하게 포맷팅됩니다. 포맷된 결과는 가능한 한 한 줄로 유지되지만, 지정된 width(너비) 값을 초과하면 여러
많은 컴퓨터 애플리케이션에서 난수(random number) 생성이 필요합니다. 하지만 컴퓨터는 진정한 의미의 무작위 숫자를 만들어낼 수 없습니다. 다른 프로그래밍 기법과 마찬가지로 Python 역시 의사 난수 생성기(pseudo-random generator)를 사용합니다.Python의 난수 생성은 메르센 트위스터(Mersenne Twister) 알고리즘을 기반으로 하며, 53비트 정밀도의 부동소수점(float) 값을 생성합니다. 이 방식은 속도가 빠르고 스레드에 안전(thread-safe)하다는 장점이 있지만, 예측 가능성이 있
파이썬 표준 배포판에는 doctest 모듈이 기본으로 포함되어 있습니다. 이 모듈은 대화형 파이썬 세션처럼 보이는 텍스트 조각을 찾아낸 뒤, 해당 세션을 실제로 실행하여 표시된 결과와 정확히 일치하는지 확인하는 기능을 제공합니다. 이러한 예제는 클래스, 모듈 또는 함수의 독스트링(docstring)에서 추출되며, 별도의 텍스트 파일에서 실행할 수도 있습니다.파이썬에서 독스트링(docstring)은 클래스, 함수 또는 모듈의 첫 번째 표현식으로 나타나는 문자열 리터럴입니다. 코드가 실행될 때는 무시되지만, 컴파일러가 이를 인식하여 해
Python 표준 라이브러리의 atexit 모듈은 프로그램이 정상적으로 종료될 때 특정 함수를 자동으로 실행해 주는 기능을 제공합니다. 이 모듈에는 register()와 unregister() 두 가지 함수가 있으며, 두 함수 모두 이미 정의된 함수를 인자로 받습니다. register()로 등록된 함수들은 인터프리터 세션이 정상적으로 끝나는 시점에 자동으로 호출됩니다. 등록 순서와 실행 순서 여러 개의 함수가 등록되면, 실행 순서는 등록된 순서의 역순(후입선출)입니다. 예를 들어 f1(), f2(), f3() 순서로 등록했다면 실
파이썬 표준 라이브러리의 timeit 모듈은 짧은 파이썬 코드 조각이 실행되는 데 걸리는 시간을 측정하기 위한 메커니즘을 제공하도록 설계되었습니다. 이 모듈은 Timer 클래스와 여러 편의 함수를 포함하고 있으며, 명령줄 인터페이스도 지원하기 때문에 프로그램 내부에서 함수를 호출하거나 터미널에서 직접 사용할 수 있습니다.timeit() 함수실행 시간을 측정하는 가장 간단한 방법은 다음과 같은 편의 함수를 사용하는 것입니다.timeit.timeit(stmt, setup, number)이 함수는 주로 두 개의 매개변수를 필요로 합니다.
소프트웨어 개발 분야에서 디버깅(debugging)은 프로그램 내 오류를 찾아내고 수정하는 과정을 의미하는 용어로 널리 사용됩니다. 파이썬의 표준 라이브러리에는 파이썬 프로그램의 디버깅을 위한 다양한 유틸리티를 제공하는 pdb 모듈이 포함되어 있습니다.pdb의 디버깅 기능은 Pdb 클래스에 정의되어 있으며, 이 모듈은 내부적으로 bdb와 cmd 모듈을 활용합니다.pdb 디버거 시작하기pdb 모듈은 매우 편리한 명령줄 인터페이스를 제공합니다. 파이썬 스크립트를 실행할 때 -m 옵션을 사용하면 디버거가 함께 실행됩니다.python -m
Python contextlib 모듈이란? 파이썬 표준 라이브러리의 contextlib 모듈은 프로그램 내에서 리소스를 적절하게 관리하는 객체인 ContextManager(컨텍스트 매니저) 클래스를 정의합니다. 파이썬에는 이러한 컨텍스트 매니저와 함께 작동하는 with 키워드가 마련되어 있습니다. 대표적인 예가 파일 객체입니다. 내장 함수 open()이 반환하는 파일 객체는 ContextManager API를 지원하므로, 실제 개발 현장에서도 파일을 다룰 때 with 문을 자주 접하게 됩니다. with 문 없이 파일을 다룰 때의