Python」カテゴリーアーカイブ

プログラミング言語「Python」に関するカテゴリーです。

PythonでQRコードのスキャン方法

PythonでQRコードの読み取り方

使用するライブラリ

ZBar
http://zbar.sourceforge.net/

Pillow (Python Imaging Library)
http://python-pillow.github.io/

使い方

QRコードの画像qrcode.pngを読み込む

>>> from PIL import Image
>>> pil = Image.open('qrcode.png').convert('L')
>>> width, height = pil.size
>>> data = pil.tobytes()

tostring()は廃止されたので、代わりにtobytes()を使います。

ZBarを使ってQRコードをスキャン

>>> import zbar
>>> scanner = zbar.ImageScanner()
>>> scanner.parse_config('enable')
>>> image = zbar.Image(width, height, 'Y800', data)
>>> scanner.scan(image)

スキャンした内容

>>> for symbol in image:
>>>   print symbol.type, ':', symbol.data

Pythonで日付を扱う場合のTips

Pythonで日付を扱いたい場合、datetimeを使うと便利です。

使い方は次のような感じです。

文字列型とdatetime型の変換

datetime型から文字列型に変換

>>> import datetime
>>> date = datetime.datetime(2020, 2, 11)
>>> date.strftime('%Y/%m/%d')
'2020/02/11'

文字列型からdatetime型に変換

>>> datetime.datetime.strptime('2020/02/11', '%Y/%m/%d')
datetime.datetime(2020, 2, 11, 0, 0)

日数の差を計算

>>> date1 = datetime.datetime.(2020, 2, 11)
>>> date2 = datetime.datetime.(2019, 2, 11)
>>> (date1 - date2).days
365

何日か後の日付を計算

>>> date = datetime.datetime.(2019, 2, 11)
>>> date + datetime.timedelta(days=365)
datetime.datetime(2020, 2, 11, 0, 0)

月の日数を調べる

calendarを使って次のような感じで取得できます。

>>> import calendar
>>> calendar.monthrange(2020, 2)[1]
29

1年は12パターンしかありませんが、うるう年も計算してくれるので便利です。

リンク

datetime — Basic date and time types — Python 3.8.2 documentation
https://docs.python.org/3/library/datetime.html

calendar — General calendar-related functions — Python 3.8.2 documentation
https://docs.python.org/3/library/calendar.html

PythonのCGIでバイナリファイルを扱う場合の注意

PythonのCGIでバイナリファイルを扱う場合はprintで改行コードが追加されることに注意してください。

具体的には

print(open('/path/to/file', 'rb').read())

のようなスクリプト書いてファイルをダウンロードさせようとすると、元のファイルより1バイト分大きなファイルになってしまいます。

修正は例えば次のような感じです。

sys.stdout.write(open('/path/to/file', 'rb').read())

普段HTMLXMLなどを扱っている場合は改行コードで問題にならないので、バイナリファイルを扱う場合は気を付けてください。

リンク

cgi — Common Gateway Interface support — Python 3.8.1rc1 documentation
https://docs.python.org/3/library/cgi.html