Python3 표준 라이브러리 개요


운영 체제 인터페이스

os 모듈은 운영 체제와 관련된 많은 기능을 제공합니다.

>>> import os
>>> os.getcwd()      # 返回当前的工作目录
'C:\Python34'
>>> os.chdir('/server/accesslogs')   # 修改当前的工作目录
>>> os.system('mkdir today')   # 执行系统命令 mkdir 
0

"from os import *" 대신 "import os" 스타일을 사용하는 것이 좋습니다. 이렇게 하면 운영 체제마다 다른 os.open()이 내장 함수 open()을 덮어쓰지 않습니다.

내장된 dir() 및 help() 함수는 os:

>>> import os
>>> dir(os)
<returns a list of all module functions>
>>> help(os)
<returns an extensive manual page created from the module's docstrings>
와 같은 대규모 모듈을 사용할 때 매우 유용합니다.

>>> import shutil
>>> shutil.copyfile('data.db', 'archive.db')
>>> shutil.move('/build/executables', 'installdir')

일상 파일 및 디렉토리 관리 작업의 경우 :mod:shutil 모듈은 사용하기 쉬운 고급 기능을 제공합니다. 레벨 인터페이스:
>>> import glob
>>> glob.glob('*.py')
['primes.py', 'random.py', 'quote.py']

파일 와일드카드

glob 모듈은 디렉토리 와일드카드 검색에서 파일 목록을 생성하는 기능을 제공합니다.
>>> import sys
>>> print(sys.argv)
['demo.py', 'one', 'two', 'three']

명령줄 매개변수

명령줄 매개변수는 종종 범용 도구 스크립트에 의해 호출됩니다. 이러한 명령줄 매개변수는 연결된 목록 형식으로 sys 모듈의 argv 변수에 저장됩니다. 예를 들어, 명령줄에서 "python deco.py one two three"를 실행하면 다음과 같은 출력을 얻을 수 있습니다.
>>> sys.stderr.write('Warning, log file not found starting a new one\n')
Warning, log file not found starting a new one

Error 출력 리디렉션 및 프로그램 종료

sys에는 stdin, stdout 및 stderr 속성도 있습니다. stdout이 재설정되면 지시에 따라 후자를 사용하여 경고 및 오류 메시지를 표시할 수도 있습니다.

>>> import re
>>> re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')
['foot', 'fell', 'fastest']
>>> re.sub(r'(\b[a-z]+) ', r'', 'cat in the the hat')
'cat in the hat'

대부분의 스크립트는 직접 종료를 위해 "sys.exit()"를 사용합니다.

문자열 정규 일치

re 모듈은 고급 문자열 처리를 위한 정규식 도구를 제공합니다. 복잡한 일치 및 처리의 경우 정규식은 간결하고 최적화된 솔루션을 제공합니다.

>>> 'tea for too'.replace('too', 'two')
'tea for two'

간단한 기능만 필요한 경우 매우 간단하고 읽고 디버그하기 쉬운 문자열 메서드를 먼저 고려해야 합니다.
>>> import math
>>> math.cos(math.pi / 4)
0.70710678118654757
>>> math.log(1024, 2)
10.0

수학 The

math 모듈은 부동 소수점 연산을 위한 기본 C 라이브러리에 대한 액세스를 제공합니다.

>>> import random
>>> random.choice(['apple', 'pear', 'banana'])
'apple'
>>> random.sample(range(100), 10)   # sampling without replacement
[30, 83, 16, 4, 8, 81, 41, 50, 18, 33]
>>> random.random()    # random float
0.17970987693706186
>>> random.randrange(6)    # random integer chosen from range(6)
4

random은 난수 생성을 위한 도구를 제공합니다.
>>> from urllib.request import urlopen
>>> for line in urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl'):
...     line = line.decode('utf-8')  # Decoding the binary data to text.
...     if 'EST' in line or 'EDT' in line:  # look for Eastern Time
...         print(line)

<BR>Nov. 25, 09:43:32 PM EST

>>> import smtplib
>>> server = smtplib.SMTP('localhost')
>>> server.sendmail('soothsayer@example.org', 'jcaesar@example.org',
... """To: jcaesar@example.org
... From: soothsayer@example.org
...
... Beware the Ides of March.
... """)
>>> server.quit()

방문 인터넷

인터넷에 액세스하고 네트워크 통신 프로토콜을 처리하기 위한 여러 모듈이 있습니다. 이 중 가장 간단한 두 가지는 URL에서 받은 데이터를 처리하기 위한 urllib.request와 이메일 전송을 위한 smtplib입니다.

>>> # dates are easily constructed and formatted
>>> from datetime import date
>>> now = date.today()
>>> now
datetime.date(2003, 12, 2)
>>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
'12-02-03. 02 Dec 2003 is a Tuesday on the 02 day of December.'

>>> # dates support calendar arithmetic
>>> birthday = date(1964, 7, 31)
>>> age = now - birthday
>>> age.days
14368

두 번째 예에서는 로컬에서 실행 중인 메일 서버가 필요합니다.

날짜 및 시간

datetime 모듈은 날짜 및 시간 처리를 위한 간단하고 복잡한 방법을 모두 제공합니다.

날짜 및 시간 알고리즘을 지원하면서 구현은 보다 효율적인 처리 및 출력 형식 지정에 중점을 둡니다.

이 모듈은 시간대 처리도 지원합니다.
>>> import zlib
>>> s = b'witch which has which witches wrist watch'
>>> len(s)
41
>>> t = zlib.compress(s)
>>> len(t)
37
>>> zlib.decompress(t)
b'witch which has which witches wrist watch'
>>> zlib.crc32(s)
226805979

데이터 압축

다음 모듈은 zlib, gzip, bz2, zipfile 및 tarfile과 같은 일반적인 데이터 패키징 및 압축 형식을 직접 지원합니다.
>>> from timeit import Timer
>>> Timer('t=a; a=b; b=t', 'a=1; b=2').timeit()
0.57535828626024577
>>> Timer('a,b = b,a', 'a=1; b=2').timeit()
0.54962537085770791

성능 측정항목

일부 사용자는 동일한 문제를 해결하기 위한 다양한 접근 방식 간의 성능 차이를 이해하는 데 관심이 있습니다. Python은 이러한 질문에 대한 직접적인 답변을 제공하는 측정 도구를 제공합니다.

예를 들어 요소 교환을 위해 튜플 패킹 및 언패킹을 사용하는 것은 전통적인 방법을 사용하는 것보다 훨씬 더 매력적으로 보이며, timeit은 현대적인 방법이 더 빠르다는 것을 증명합니다.

def average(values):
    """Computes the arithmetic mean of a list of numbers.

    >>> print(average([20, 30, 70]))
    40.0
    """
    return sum(values) / len(values)

import doctest
doctest.testmod()   # 自动验证嵌入测试

timeit의 세분화된 기능과 비교하여 :mod:profile 및 pstats 모듈은 더 큰 코드 블록에 대한 시간 측정 도구를 제공합니다. 🎜

테스트 모듈

기능별 테스트 코드를 개발하고 개발 과정에서 자주 테스트하는 것도 좋은 소프트웨어를 개발하는 방법 중 하나입니다.

doctest 모듈은 문서를 기반으로 모듈을 스캔하고 테스트하는 도구를 제공합니다. 프로그램 문자열 실행 테스트에 포함됩니다.

구문을 테스트하는 것은 출력을 잘라내어 문서 문자열에 붙여넣는 것만큼 간단합니다.

사용자 제공 예제로 문서를 강화하여 doctest 모듈이 코드 결과가 문서와 일치하는지 확인할 수 있습니다.

import unittest

class TestStatisticalFunctions(unittest.TestCase):

    def test_average(self):
        self.assertEqual(average([20, 30, 70]), 40.0)
        self.assertEqual(round(average([1, 5, 7]), 1), 4.3)
        self.assertRaises(ZeroDivisionError, average, [])
        self.assertRaises(TypeError, average, 20, 30, 70)

unittest.main() # Calling from the command line invokes all tests

unittest 모듈은 doctest 모듈만큼 사용하기 쉽지는 않지만 더 자세한 종합 테스트 세트 제공:

rrreee