やったもん勝ち

主にプログラミングのこと。生産性向上の某とかも。

よく使うpython3のスニペット集(随時更新)

pythonスニペット

unixtime⇔datetimeの変換

import datetime

# datetimeのnowをつくる
now = datetime.datetime.now()
# => datetime.datetime(2018, 6, 20, 12, 37, 50, 642687)

# datetiemをunixtimeに変換
unixtime = int(now.strftime('%s'))
# => 1529465870

# unixtimeをdatetimeに変換
datetime.datetime.fromtimestamp(unixtime)
# => datetime.datetime(2018, 6, 20, 12, 37, 50)```

datetime⇔strの変換

import datetime

# datetime型にする
date_str = '2018/2/1 12:30'
date_dt = datetime.datetime.strptime(date_str, '%Y/%m/%d %H:%M')
print(date_dt)

# str型にする
dt_now = datetime.datetime.now()
print(dt_now.strftime('%Y-%m-%d %H:%M:%S'))
# 2018-02-02 18:31:13

boto3でデフォルト以外のprofileを使う

import boto3
from boto3.session import Session

profile = 'hoge'
session = Session(profile_name=profile)

配列のループをindexと一緒に

teams = ["Packers", "49ers", "Ravens", "Patriots"]
for index, team in enumerate(teams):
    print index, team
 
>>> 0 Packers
>>> 1 49ers
>>> 2 Ravens
>>> 3 Patriots

2つの配列を同時にループ

nfc = ["Packers", "49ers"]
afc = ["Ravens", "Patriots"]
 
for teama, teamb in zip(nfc, afc):
    print teama + " vs. " + teamb
 
>>> Packers vs. Ravens
>>> 49ers vs. Patriots

正規表現

match

import re

pattern = r"ca"
text = "caabsacasca"
matchOB = re.match(pattern , text)
if matchOB:
    print matchOB.group()  # 'ca'

search

pattern = r"ca"
text = "caabsacasca"
matchOB = re.search(pattern , text)

if matchOB:
    print(matchOB)   # <_sre.SRE_Match object; span=(0, 2), match='ca'>
    print(matchOB.group()) # マッチした文字列を返す # ca
    print(matchOB.start()) # マッチの開始位置を返す # 0
    print(matchOB.end())  # マッチの終了位置を返す # 2
    print(matchOB.span())  # マッチの位置(start, end)を含むタプルを返す # (0, 2)

ロギング

import logging
from logging import getLogger, StreamHandler, Formatter

# loggerオブジェクトの宣言
logger = getLogger("Log")
# loggerのログレベル設定(ハンドラに渡すエラーメッセージのレベル)
logger.setLevel(logging.DEBUG)
# handlerの生成
stream_handler = StreamHandler()
# handlerのログレベル設定(ハンドラが出力するエラーメッセージのレベル)
stream_handler.setLevel(logging.DEBUG)
# ログ出力フォーマット設定
handler_format = Formatter('[%(levelname)s]\t%(asctime)s : %(message)s')
stream_handler.setFormatter(handler_format)
# loggerにhandlerをセット
logger.addHandler(stream_handler)

# ログ出力
logger.error("ERROR")
logger.warning("WARN")
logger.info("INFO")
logger.debug("DEBUG")

ファイル操作

ファイル読み込み

file_name = 'hoge.csv'
with open(file_name) as f:
    for line in f:
        cols = line.split(",")
        print(cols[0].strip())
  • strip()しないと、最後のカラムに改行も含まれてしまう。

ファイル書き込み

file_name = 'dest.txt'
with open(file_name, mode='w') as f:
    f.write(s)