LoginSignup
2
5

More than 1 year has passed since last update.

python3チートシート

Last updated at Posted at 2018-09-07

Python Cheat Sheet

よく忘れるやつ

演算

>>> 1 + 2
3
>>> 3 - 2
1
>>> 3 * 5
15
>>> 7 / 2
3.5
>>> 7 // 2
3
>>> 7 % 2
1
>>> 3 ** 3
27
>>> 27 ** 0.5
3.0

ビット操作

>>> bin(0b1 << 8)
'0b100000000'
>>> bin(0b1000 >> 3)
'0b1'
>>> bin(0b1111 & 0b110)
'0b110'
>>> bin(0b1000 | 0b1001)
'0b1001'
>>> bin(0b1100 ^ 0b1001)
'0b101'

型の確認

>>> isinstance(0.1, float)
True
>>> type(0.1)
<class 'float'>

フォーマット関数

呼び出し

>>> '{1}, {0}, X: {2[0]}, Y: {2[1]}, parrot is {parrot}'.format(
...     'egg',
...     'bacon',
...     [10, 20],
...     parrot='DEAD'
... )
'bacon, egg, X: 10, Y: 20, parrot is DEAD'

幅指定

>>> '{:<20}'.format('left aligned')
'left aligned        '
>>> '{:>20}'.format('right aligned')
'       right aligned'
>>> '{:^20}'.format('center')
'       center       '
>>> '{:-^20}'.format('fill center')
'----fill center-----'

表記制御

>>> '{:05}'.format(23)
'00023'
>>> '{0:,}'.format(1234567890)
'1,234,567,890'
>>> '{0}, {0:f}, {0:.2f}, {0:.0%}'.format(0.345)
'0.345, 0.345000, 0.34, 34%'
>>> '{0:d}, 0x{0:x}, 0x{0:X}, 0o{0:o}, 0b{0:b}'.format(42)
'42, 0x2a, 0x2A, 0o52, 0b101010'
>>> '{:%Y-%m-%d %H:%M:%S}'.format(datetime.datetime.now())
'2018-08-06 13:24:11'
>>> '{0:{1}}'.format(12, '>10')
'        12'

ロギング

基本形

from logging import getLogger, DEBUG, StreamHandler
logger = getLogger(__name__)
logger.setLevel(DEBUG)
logger.addHandler(StreamHandler())

logger.debug('hello! %s', 'world')

各ファイルは基本的に以下のように定義すればよい

from logging import getLogger
logger = getLogger(__name__)

from logging import ...という書き方を使うのはloggingloggerを書き間違えやすいため。(logging.debug()のような関数も存在するのでエラーが発生せず、間違いに気づきづらい)

ログレベル

  • logger.critical()
  • logger.error()
  • logger.warning()
  • logger.info()
  • logger.debug()

ログのファイル出力

これが基本形

from logging import getLogger, INFO, Formatter
from logging.handlers import TimedRotatingFileHandler
logger = getLogger('handler_name')
logger.setLevel(INFO)
handler = TimedRotatingFileHandler(
    '/var/log/apilog.log',
    when='d',
    backupCount=7,
    encoding='utf-8',
    utc=False
)
handler.setFormatter(Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
logger.addHandler(handler)

主なログフォーマット

  • %(asctime)s 時刻
  • %(created)f Unix時間
  • %(filename)s ファイル名
  • %(funcName)s 関数名
  • %(levelname)s ログレベル
  • %(lineno)d ロギングされた行番号
  • %(message)s ログメッセージ
  • %(module)s モジュール名
  • %(name)s ロガー名
  • %(pathname)s ファイルのフルパス
  • %(process)d プロセスID
  • %(processName)s プロセス名
  • %(thread)d スレッドID
  • %(threadName)s スレッド名

datetime

>>> import datetime
>>> now = datetime.datetime.now()
>>> now.strftime('%Y/%m/%d %H:%M:%S')
'2018/09/06 14:58:21'
>>> datetime.datetime.strptime('2018-08-07T17:29:20.581498Z', '%Y-%m-%dT%H:%M:%S.%fZ')
datetime.datetime(2018, 8, 7, 17, 29, 20, 581498)

フォーマット

  • %y 0埋めした2桁の年
  • %Y 4桁の年
  • %b 月の短縮形
  • %B 月名
  • %m 0埋めした月
  • %d 0埋めした日
  • %a 曜日の短縮形
  • %A 曜日名
  • %H 0埋めした時間(24表記)
  • %I 0埋めした時(12表記)
  • %p AM/PM
  • %M 0埋めした分
  • %S 0埋めした秒
  • %s UnixTime
  • %f 0埋めしたマイクロ秒
  • %z UTCオフセット
  • %Z タイムゾーン
  • %c 無難な日時表示
  • %x 無難な日付表示
  • %X 無難な時刻表示

例外処理

try:
    # some code
except IOError:
    ...
except (KeyError, ValueError) as e:
    ...
except Exception as e:
    logger.except(e)

主な組み込み例外

  • Exception
  • AttributeError
  • ValueError
  • IndexError
  • ImportError
  • KeyboardInterrupt
  • RuntimeError
  • StopIteration
  • TypeError
2
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5