UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position

Pythonで頻発するこのエラー…。

Unicodeとか、バイト文字列とかいいから、さっさと直したい!!(´ω`)

…。はい、その声にお答えします。

.encode(‘utf-8’)をつけてしまいましょう。(´ω`)

下記はサンプルです。

print('日本語やでー'.encode('utf-8'))

 

Python 日付の名前のファイルを作るサンプルコード

またまた、Pythonのコピペ用コードです。

日付の名前のファイルを作りたいとき、ありますよね?ログ取ったりとか。

そういう時にちゃちゃっとファイルを作るやつです。

import os
import datetime


def saveTrainExamples(str):

    folder = "C:\\hogehoge\\test_dir"
    if not os.path.exists(folder):
        os.makedirs(folder)
    filename = os.path.join(folder,  datetime.datetime.today().strftime('%Y-%m-%d') + ".txt")
    with open(filename, "a") as f:

        str = "\n" + str
        f.write(str)
        
    f.closed


saveTrainExamples("What a little monkey!")

 

ちなみに、私は開発はWindowsでやってますが、年月日の形式を

filename = os.path.join(folder,  datetime.datetime.today().strftime('%Y/%m/%d') + ".txt")

でやっていたら、下記のようなエラーが出ました。

FileNotFoundError: [Errno 2] No such file or directory: ‘C:\\hogehoge\\test_dir\\2018/07/19.txt’

なんでなんで??と思っていたら、そっか、Windowsでは/の入ったファイル作れないんですね…。

 

Let’s Encryptでワイルドカード証明書を発行する

Let’s Encryptがワイルドカード証明書に対応したので発行してみました。

下記コマンドでワイルドカード証明書を発行できます。

# certbot-auto certonly --manual \
  -d *.example.com -d example.com \
  --preferred-challenges dns-01 \
  --server https://acme-v02.api.letsencrypt.org/directory

すると、下記のように認証用にDNSのTXTレコードの追加を要求されます。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.example.com with the following value:

vduUg7XfNjwQ8hCEHZD0owLHo6Z-sf9Wmm8w5345maY

Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue

要求されたとおりにTXTレコードを追加します。

_acme-challenge.example.com. 300 IN TXT "vduUg7XfNjwQ8hCEHZD0owLHo6Z-sf9Wmm8w5345maY"

TXTレコードの追加がDNSサーバーに反映された後に、Enterを押します。

TXTレコードの確認するには下記コマンドを実行します。

# dig _acme-challenge.example.com TXT

TXTレコードの検証が成功すれば、ワイルドカード証明書が発行されます。

参考URL: https://community.letsencrypt.org/t/getting-wildcard-certificates-with-certbot/56285

コピペ用 Python ミリ秒を時:分:秒の文字列に変換する

コピペ用のサンプルコードです。
ミリ秒を時:分:秒のフォーマットにして返します。

def millSecToStr(millSeconds):
    m, s = divmod(millSeconds / 1000, 60)
    h, m = divmod(m, 60)
    str_duration = "%d:%02d:%02d" % (h, m, s)

    return str_duration


#例
str_time = millSecToStr(10000000)
print(str_time)

#2:46:40 が出力されます。

リストと文字列をフォーマットして表示させる

リストを文字列として表示させたい場合が往々にしてあると思います。

format 関数を使うと簡単にできます!ヾ(´ω`○).

win_list = ["blue","eyes","white","dragon"]
print("順番リスト{}".format(win_list))

#次が出力されます。
#順番リスト['blue', 'eyes', 'white', 'dragon']

文字列を混ぜたい場合は、下記のようにもできます。

player = "kaiba"
win_list = ["blue","eyes","white","dragon"]

print("勝利 %s 順番リスト{}".format(win_list) % player)

#次が出力されます。 
#勝利 kaiba 順番リスト['blue', 'eyes', 'white', 'dragon']