Pythonチュートリアル(10章)の内容を箇条書きでまとめた

前の記事：Pythonチュートリアル(9章)の内容を箇条書きでまとめた(作成中)

#はじめに
[Python3 エンジニア認定基礎試験](https://www.pythonic-exam.com/exam/basic)対策として、Pythonチュートリアル(書籍)の内容を暗記しやすい箇条書きにまとめた自分用メモです。

##参考資料
Pythonチュートリアル： https://docs.python.org/ja/3/tutorial/
10章： https://docs.python.org/ja/3/tutorial/stdlib.html
書籍： https://www.oreilly.co.jp/books/9784873117539/

#"10章 標準ライブラリめぐり"
- Python3 エンジニア認定基礎試験の配点
    - 4 / 40問(10.0%) ☆☆★★★(重要度：中－)
- テーマ
    - 標準ライブラリ

#10.1 OSインターフェイス
- **osモジュール** はOSとやりとりする関数を提供する。
    - *os.getcwd()* # カレントディレクトリを取得
    - *os.chdir('/server/accesslogs')* # カレントディレクトリを変更
    - *os.system('mkdir today')* # システム側のシェルでコマンド実行
- **shutilモジュール** はファイルやディレクトリを管理する関数を提供する。
    - *shutil.copyfile('data.db', 'archive.db')* # ファイルをコピー
    - *shutil.move('/build/executables', 'installdir')* # ファイル/ディレクトリを移動

#10.2 ファイルのワイルドカード
- **globモジュール** はディレクトリをワイルドカード検索してファイル名のリストを返す関数を提供する。
    - *glob.glob('\*.py')* # \*.py ファイルを検索

#10.3 コマンドライン引数
- **sysモジュール**の**argv属性**に、コマンドライン引数がリストとして格納されている。
    - ->詳細は、["2.1.1 引数を渡す"](https://qiita.com/Wakii/items/3a9efa210d2f602fa36e#211-%E5%BC%95%E6%95%B0%E3%82%92%E6%B8%A1%E3%81%99) 参照。
- **getoptモジュール**は、UNIXのgetopt()関数のようにsys.argvを処理する。
    - *opts,args = getopt.getopt(args, shortopts, longopts=[])* 
- **argparseモジュール**は、パワフルで柔軟なコマンドライン処理機能を提供する。
    - *parser = argparse.ArgumentParser(description='Process some integers.')*
    - *args = parser.parse_args()*
    - *print(args.accumulate(args.integers))*

#10.4 エラー出力のリダイレクト(行き先を変えること)とプログラムの終了
- sysモジュールには、argv以外にも以下のような属性やメソッドがある。
    - **sys.stdin** ... STDIN(標準入力)のファイルオブジェクト
    - **sys.stdout** ... STDOUT(標準出力)のファイルオブジェクト
    - **sys.stderr** ... STDERR(標準エラー出力)のファイルオブジェクト
    - **sys.exit()** ... スクリプトを終了する。

#10.5 文字列パターンマッチング
- **reモジュール**は高度な文字列処理を行う正規表現ツールを提供する。
- 置換などの簡単な操作は**文字列メソッド**の方が読みやすくデバッグもしやすい。

#10.6 数学
- **mathモジュール**を使うと、浮動小数点数数学用の下層Cライブラリ関数にアクセスできる。
- **randomモジュール**は乱数の取得に使う。
- **statisticsモジュール**は数値データの基本統計量(平均、中央値、分散など)の算出に使う。

#10.7 インターネットへのアクセス
- 以下はインターネットアクセス用モジュールの一例である。
    - **urllib.requestモジュール**は指定したURLのデータを取得するのに使う。
    - **smtplibモジュールは**メールを送るのに使う。

#10.8 日付と時間
- **datetimeモジュール**は日付や時間の計算や出力形式の操作に使う。

#10.9 データ圧縮
- データ圧縮をサポートするモジュールが、以下のように圧縮形式ごとに提供されている。
    - **zlibモジュール**
    - **gzipモジュール**
    - **bz2モジュール**
    - **lzmaモジュール**
    - **zipfileモジュール**
    - **tarfileモジュール**

#10.10 パフォーマンス計測
- **timeitモジュール**は、Pythonコードのタイマー(時間測定)機能を提供する。
- **profileモジュール**は、以下のようなプログラムの統計情報を提供する。
    - 各部分がどれだけ頻繁に呼ばれたか？
    - 各部分の実行にどれだけ時間がかかったか？
- **pstatsモジュール**は、プログラムの統計情報をフォーマットし表示する情報を提供する。
- 余談だが、書籍だとここに二つもtypoがある(timetit, pstrats)ので注意。

#10.11 品質管理
- **doctestモジュール**は、モジュールをスキャンしdocstringに埋め込まれたテストを自動検証するツールを提供する。
- **unittestモジュール**は、JUnitのような単体(Unit)テストのフレームワークを提供する。

#10.12 電池付属です
- Pythonには電池付属(Battery Included:(電化製品などが)すぐに使えること)の哲学がある。
    - **xmlrpc.clientモジュール**と**xmlrpc.serverモジュール**は、リモートプロシージャコールの簡単な実装を可能にする。
    - **emailパッケージ**は、メールメッセージを処理するライブラリのパッケージである。
    - **jsonパッケージ**は、JSONファイルのパース(解釈)をサポートする。
    - **csvモジュール**は、CSVファイルの直接の読み書き機能をサポートする。
    - XMLの処理は以下のパッケージでサポートされている。
        - **xml.etree.ElementTreeパッケージ**
        - **xml.domパッケージ**
        - **xml.saxパッケージ**
    - **sqlite3モジュール**はSQLiteデータベースライブラリのラッパーで、微妙にノンスタンダードなSQL構文でアップデート、アクセスできる永続データベースを提供する。
    - 国際化は以下のモジュールでサポートされている。
        - **gettextモジュール**
        - **localeモジュール**
        - **codecsパッケージ**

次の記事：Pythonチュートリアル(11章)の内容を箇条書きでまとめた(作成中)