본문 바로가기

python tutorial -10 중요 표준 라이브러리

https://docs.python.org/ko/3/tutorial/stdlib.html

python tutorial part 10 

표준 라이브러리 둘러보기 標準ライブラリミニツアー


10.1. 운영 체제 인터페이스  OSへのインタフェース


>>>
>>> import os
>>> os.getcwd()      # Return the current working directory
'C:\\Python37'
>>> os.chdir('/server/accesslogs')   # Change current working directory
>>> os.system('mkdir today')   # Run the command mkdir in the system shell
0


import os  으로 import 

-> from os import *  - x

-> os.open() 이 open() 과 구분할 수 있음.

from os import * ではなく、 import os 形式を使うようにしてください。

そうすることで、動作が大きく異なる組み込み関数 open() が os.open() で遮蔽されるのを避けられます。


dir()  help() 

組み込み関数 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>


모듈 shutil (import shutil)

일상적인 파일과 디렉터리 관리 작업 - 고수준의 인터페이스를 제공

ファイルやディレクトリの日常的な管理作業のために、より簡単に使える高水準のインタフェースが shutil モジュールで提供されています:

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




10.2. 파일 와일드카드 ファイルのワイルドカード表記

glob 모듈

 디렉터리 와일드카드 검색으로 파일 목록을 만드는 함수 제공

glob.glob(*.py)

glob モジュールで

ディレクトリのワイルドカード検索からファイルのリストを生成するための関数を提供しています:

>>>
>>> import glob
>>> glob.glob('*.py')
['primes.py', 'random.py', 'quote.py']




10.3. 명령행 인자 コマンドライン引数


명령행 인자 :  sys 모듈의 argv 어트리뷰트에 리스트로 저장 (sys.argv)

예를 들어, 명령행에서 python demo.py one two three 를 실행하면 다음과 같은 결과가 출력됩니다:


一般的なユーティリティスクリプトでは、よくコマンドライン引数を扱う必要があります。

コマンドライン引数は sys モジュールの argv 属性にリストとして保存されています。

例えば、以下の出力は、 python demo.py one two three とコマンドライン上で起動した時に得られるものです:


>>>
>>> import sys
>>> print(sys.argv)
['demo.py', 'one', 'two', 'three']


getopt 모듈은 유닉스 getopt() 함수의 규칙을 사용해서 sys.argv 를 처리

getopt モジュールは、 sys.argv を Unix の getopt() 関数の慣習に従って処理します。



10.4. 에러 출력 리디렉션과 프로그램 종료 エラー出力のリダイレクトとプログラムの終了

sys 모듈 - stdinstdoutstderr 어트리뷰트

 stderr  - 경고와 에러 메시지들을 출력


sys モジュールには、 stdinstdoutstderr を表す属性も存在します。

     stderr は、警告やエラーメッセージを出力して、 stdout がリダイレクトされた場合でも読めるようにするために便利です:

>>>
>>> sys.stderr.write('Warning, log file not found starting a new one\n')
Warning, log file not found starting a new one



 sys.exit() 

직접 스크립트를 종료

sys.exit() は、スクリプトを終了させるもっとも直接的な方法です。



10.5. 문자열 패턴 매칭  文字列のパターンマッチング


re 모듈

고급 문자열 처리를 위한 정규식 도구 제공

복잡한 매칭과 조작을 위해, 정규식은 간결하고 최적화된 솔루션 제공


re モジュールでは、

より高度な文字列処理のための正規表現を提供しています。

正規表現は複雑な一致検索や操作に対して簡潔で最適化された解決策を提供します:

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


간단한 기능만 필요한 경우 : 문자열 메소드가 선호됨. 읽고 디버깅이 쉽기 때문

最小限の機能だけが必要なら、読みやすくデバッグしやすい文字列メソッドの方がお勧めです

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




10.6. 수학 数学


>>>
>>> import math
>>> math.cos(math.pi / 4)
0.70710678118654757
>>> math.log(1024, 2)
10.0


random 

>>>
>>> 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


statistics  통계적 특성 (평균, 중간값, 분산, 등등) 

statistics  統計的特性(平均、中央値、分散等)

>>>
>>> import statistics
>>> data = [2.75, 1.75, 1.25, 0.25, 0.5, 1.25, 3.5]
>>> statistics.mean(data)
1.6071428571428572
>>> statistics.median(data)
1.25
>>> statistics.variance(data)
1.3720238095238095


SciPy 프로젝트 <https://scipy.org> 는 다른 수치 계산용 모듈들을 많이 갖고 있습니다.

SciPy プロジェクト <https://scipy.org> は数値処理のための多くのモジュールを提供しています。



10.7. 인터넷 액세스 インターネットへのアクセス


urllib.request : URL에서 데이터를 읽음

smtplib  : 메일을 보냄

 URL からデータを取得するための urllib.request と、

メールを送るための smtplib です:

>>>
>>> from urllib.request import urlopen
>>> with urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl') as response:
...     for line in response:
...         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()

(두 번째 예는 localhost 에서 메일 서버가 실행되고 있어야 한다는 것에 주의하세요.)

(2つ目の例は localhost でメールサーバーが動いている必要があることに注意してください。)




10.8. 날짜와 시간 日付と時刻


datetime 

모듈은 날짜와 시간을 조작하는 클래스들을 제공

효율적으로 멤버를 추출

모듈은 시간대를 고려하는 객체들도 지원합니다.


datetime モジュールは、

日付や時刻を操作するためのクラスを、単純な方法と複雑な方法の両方で提供しています。

日付や時刻に対する算術がサポートされている一方、実装では出力のフォーマットや操作のための効率的なデータメンバ抽出に重点を置いています。

このモジュールでは、タイムゾーンに対応したオブジェクトもサポートしています。

>>>
>>> # 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



10.9. 데이터 압축 データ圧縮


zlibgzipbz2lzmazipfiletarfile.


一般的なデータアーカイブと圧縮形式は、以下のようなモジュールによって直接的にサポートされます

zlibgzipbz2lzmazipfiletarfile

>>>
>>> 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



10.10. 성능 측정 パフォーマンスの計測


timeit 

>>>
>>> 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


profile 과 pstats 모듈은 큰 블록의 코드에서 시간 임계 섹션을 식별하기 위한 도구

profile や pstats モジュールではより大きなコードブロックにおいて律速となる部分を判定するためのツールを提供しています。



10.11. 품질 관리 品質管理


고품질의 소프트웨어를 개발하는 한 가지 접근법: 

개발되는 각 함수에 대한 테스트를 작성하고, 그것들을 개발 프로세스 중에 자주 실행하는 것


高い品質のソフトウェアを開発するための一つのアプローチは、

各関数に対して開発と同時にテストを書き、開発の過程で頻繁にテストを走らせるというものです。



doctest 모듈

프로그램의 독스트링들에 내장된 테스트들을 검사하는 도구를 제공

독스트링에 예제와과 그 결과를 저장


doctest モジュールでは、

モジュールを検索してプログラムの docstring に埋め込まれたテストの評価を行うためのツールを提供しています。

テストの作り方は単純で、典型的な呼び出し例とその結果を docstring にカット&ペーストするだけです。

この作業は、ユーザに使用例を与えるという意味でドキュメントの情報を増やすと同時に、ドキュメントに書かれているコードが正しい事を確認できるようになります:

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()   # automatically validate the embedded tests



unittest 모듈

doctest 만큼 간단 x, 

더욱 포괄적인 테스트 집합을 별도의 파일로 관리

unittest モジュールは

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)
        with self.assertRaises(ZeroDivisionError):
            average([])
        with self.assertRaises(TypeError):
            average(20, 30, 70)

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




10.12. 배터리가 포함됩니다 バッテリー同梱

파이썬은 "배터리가 포함됩니다" 철학을 갖고 있습니다.

더 큰 패키지의 정교하고 강력한 기능을 통해 가장 잘 나타납니다


Python には "バッテリー同梱 (batteries included)" 哲学があります。この哲学は、

洗練され、安定した機能を持つ Python の膨大なパッケージ群に如実に表れています


  • xmlrpc.client 와 xmlrpc.server 모듈은 원격 프로시저 호출을 구현하는 일을 거의 사소한 일로 만듭니다. 모듈의 이름에도 불구하고, XML에 대한 직접적인 지식이나 처리가 필요하지 않습니다.
  • email 패키지는 MIME 및 기타 RFC 2822 기반 메시지 문서를 포함하는 전자 메일 메시지를 관리하기 위한 라이브러리입니다. 실제로 메시지를 보내고 받는 smtplib 와 poplib 와는 달리, email 패키지는 복잡한 메시지 구조 (첨부 파일 포함) 를 작성하거나 해독하고 인터넷 인코딩과 헤더 프로토콜을 구현하기 위한 완벽한 도구 상자를 가지고 있습니다.
  • json 패키지는 널리 사용되는 데이터 교환 형식을 파싱하기위한 강력한 지원을 제공합니다. csv 모듈은 데이터베이스와 스프레드시트에서 일반적으로 지원되는 쉼표로 구분된 값 형식으로 파일을 직접 읽고 쓸 수 있도록 지원합니다. XML 처리는 xml.etree.ElementTreexml.dom 및 xml.sax 패키지에 의해 지원됩니다. 이러한 모듈과 패키지를 함께 사용하면 파이썬 응용 프로그램과 다른 도구 간의 데이터 교환이 크게 단순해집니다.
  • sqlite3 모듈은 SQLite 데이터베이스 라이브러리의 래퍼인데, 약간 비표준 SQL 구문을 사용하여 업데이트되고 액세스 될 수 있는 퍼시스턴트 데이터베이스를 제공합니다.
  • 국제화는 gettextlocale, 그리고 codecs 패키지를 포함한 많은 모듈에 의해 지원됩니다.
  • xmlrpc.client および xmlrpc.server モジュールは、遠隔手続き呼び出し (remote procedure call) を全く大したことのない作業に変えてしまいます。モジュール名とは違い、XML を扱うための直接的な知識は必要ありません。
  • email パッケージは、MIME やその他の RFC 2822 に基づくメッセージ文書を含む電子メールメッセージを管理するためのライブラリです。実際にメッセージを送信したり受信したりする smtplib や poplib と違って、email パッケージには (添付文書を含む) 複雑なメッセージ構造の構築やデコードを行ったり、インターネット標準のエンコードやヘッダプロトコルの実装を行ったりするための完全なツールセットを備えています。
  • json パッケージはこの一般的なデータ交換形式のパースをロバストにサポートしています。csv モジュールはデータベースや表計算で一般的にサポートされている CSV ファイルを直接読み書きするのをサポートしています。xml.etree.ElementTreexml.dom ならびに xml.sax パッケージは XML の処理をサポートしています。総合すると、これらのモジュールによって Python アプリケーションと他のツールの間でとても簡単にデータを受け渡すことが出来ます。
  • sqlite3 モジュールは SQLite データベースライブラリのラッパです。若干非標準の SQL シンタックスを用いて更新や接続出来る永続的なデータベースを提供します。
  • 国際化に関する機能は、 gettextlocalecodecs パッケージといったモジュール群でサポートされています。