ロリポの勉強ノート

パソコンやWeb関連で勉強したことの覚え書きです。

Python関連の投稿

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

# PythonでQRコードのスキャン方法PythonでQRコードの読み取り方。## 使用するライブラリ- ZBar<br><http://zbar.sourceforge.net/>- Pillow (Python Imaging Library)<br><http://python-pillow.github.io/>## 使い方QRコードの画像`qrcode.png`を読み込む>>> from PIL import Image>>> pil = Image.open('qrcode.png').co ...

Python QRコード
March 14, 2020

Pythonで日付を扱う場合のTips

# Pythonで日付を扱う場合のTipsPythonで日付を扱いたい場合、`datetime`を使うと便利です。使い方は次のような感じです。### 文字列型とdatetime型の変換datetime型から文字列型に変換>>> import datetime>>> date = datetime.datetime(2020, 2, 11)>>> date.strftime('%Y/%m/%d')'2020/02/11'文字列型からdatetime型に変換>>> datetime.datetime.strp ...

Python
February 28, 2020

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

# PythonのCGIでバイナリファイルを扱う場合の注意Pythonの<abbr title="Common Gateway Interface">CGI</abbr>でバイナリファイルを扱う場合は`print`で改行コードが追加されることに注意してください。具体的にはprint(open('/path/to/file', 'rb').read())のようなスクリプト書いてファイルをダウンロードさせようとすると、元のファイルより1バイト分大きなファイルになってしまいます。修正は例えば次のような感じです。 ...

Python
December 18, 2019

Unsafe load call disabled by Gentoo

# Unsafe load call disabled by GentooGentoo Linux上でとあるPythonスクリプトを実行したところError: Unsafe load() call disabled by Gentoo. See bug #659348のようなエラーで実行できなくなってしまいました。自作のスクリプトではありませんが、以前は問題なく動いていたスクリプトです。ということで少し調べてみたところ、下の件が関係しているような感じです。> 659348 – (CVE-2017-1834 ...

Python Gentoo
November 28, 2019

Pillow (Python Imaging Library)でPNGファイルを扱う時の注意

# Pillow (Python Imaging Library)でPNGファイルを扱う時の注意Pythonのライブラリ「Pillow」を使ってPNGファイルをJPGファイルに変換したい場合、次のようなスクリプトで実行できます。from PIL import ImageImage.open('example.png').save('example.jpg')ただし、PNGファイルにAlpha値が含まれていると次のようなエラーになってしまいます。OSError: cannot write mode RGBA ...

Python
July 19, 2019

PythonでURLのparse

# PythonでURLのparsePythonの`urllib`を使うと簡単にURLをparseすることができます。>>> import urllib.parse>>> urlparse = urllib.parse.urlparse('http://www.example.com/python/?q1=example&q2=10')>>> urlparseParseResult(scheme='http', netloc='www.example.com', path='/python/', para ...

Python
April 07, 2019

Pythonのdict型にドットアクセスを追加する方法

# Pythonのdict型にドットアクセスを追加する方法Pythonのdict型にJavaScript風のドット「`.`」アクセスを追加したい場合は、`__getattr__`と`__setattr__`を使って実装できるそうです。>>> class myDict(dict):... def __init__(self, **arg):... super(myDict, self).__init__(**arg)... def __getattr__(self, key):... ...

Python
February 09, 2019

Pythonでディレクトリを再帰的にスキャン

# Pythonでディレクトリを再帰的にスキャンPythonでディレクトリを再帰的にスキャンしてファイルを取得したい場合は`os.scandir`を使って次のような感じでできるそうです。>>> import os>>> def scandir(path='.'):... for e in os.scandir(path):... if e.is_dir():... yield from scandir(e.path)... else:... yield e... ...

Python
January 19, 2019

Pythonのリストをインデックス付きでforループ

# Pythonのリストをインデックス付きでforループPythonのリストをインデックス付きでforループしたい場合は`enumerate`を使うと良いそうです。使い方は次のような感じです。>>> w = ['Sun', 'Mon','Tue','Wed', 'Thu', 'Fri', 'Sat']>>> for index, value in enumerate(w):... print('w[{}] = {}'.format(index, value))...w[0] = Sunw[1] = M ...

Python
January 17, 2019

PythonのString Formattingを拡張

# PythonのString Formattingを拡張Python 3で追加された`format`を使うと文字列操作が便利になります。使い方は次のような感じです。>>> '{0} + {1} = {2}'.format(1, 2, 1+2)'1 + 2 = 3'参考:<a href="/Python%E3%81%AE%E6%96%B0%E3%81%97%E3%81%84%E6%96%87%E5%AD%97%E5%88%97%E6%9B%B8%E5%BC%8F%E6%93%8D%E4%BD%9C">Py ...

Python
January 17, 2019

Pythonでファイルをコピーする方法

# Pythonでファイルをコピーする方法Pythonでファイルをコピーしたい場合は`shutil`モジュールの`copy`が使えます。<sup>注</sup>>>> import shutil>>> shutil.copy('/path/to/src', '/path/to/dst')ちなみに、ファイルの作成時刻や変更時刻などはコピーされませんので、必要に応じて`copystat`も追加してください。>>> shutil.copy('/path/to/src', '/path/to/dst')>>> s ...

Python
January 11, 2019

SQLiteでdateやdatetimeの扱い方

# SQLiteでdateやdatetimeの扱い方PythonのSQLiteモジュールを使ってdate型やdatetime型を扱う方法。### テーブルの作成$ sqlite3 data.dbsqlite> CREATE TABLE sample(d date, t timestamp);sqlite> .quit### Pythonでdate型やdatetime型の読み書き>>> import sqlite3, datetime, time>>> con = sqlite3.connect('data ...

Python SQL
May 17, 2016

PILを使わないでpngファイルの作成

# PILを使わないでpngファイルの作成Pythonを使って画像ファイルを扱いたい場合、<abbr title="Python Imaging Library">PIL</abbr>かPillowを使うのがほとんどだと思いますが、レンタルサーバーなど、ライブラリを自由にインストールできない環境で使えなくて困ることが稀にあります。そういう場合によく使わせてもらうのがPyPNGというライブラリです。> GitHub - drj11/pypng: Pure Python library for PNG ima ...

Python
April 26, 2016

SQLインジェクション

# SQLインジェクションシステムで想定外のSQLコマンドを実行する攻撃手法。## 例例えば、変数`where`に適切な条件が設定されることを想定してstatement = "SELECT * FROM table WHERE " + where + " ;"db.execute(statement)のようなスクリプトを作ったとします。ここで、`where`にwhere = "name; DROP TABLE table;"のような値が入っていた場合に、次のようなコマンドが実行されることになり、セキュリテ ...

Python SQL
April 20, 2016

Access-Control-Allow-Origin

# Access-Control-Allow-Origin設置したCGIを違うドメインからでも使えるようにしたい場合は、HTTPヘッダーに`Access-Control-Allow-Origin`を追加するとできるようになるそうです。## CGI側でヘッダーを追加する場合次のような感じでHTTPヘッダーを追加します。print('Access-Control-Allow-Origin: *')print('Content-Type: text/plain; charset=UTF-8')上はPythonの ...

Apache Python
April 17, 2016

Python製CGIのデバッグ

# Python製CGIのデバッグローカルPCでの開発中は逐一エラーを確認しながらデバッグできますが、サーバーにアップロードしてしまうと、デバッグが大変になってしまいます。そういう時は、`cgitb`で簡単にデバッグできます。#!/usr/bin/env pythonimport cgitbcgitb.enable()# 以下、実行したいスクリプトraise Exception('error')こんな感じにしておけば、エラーが発生した場所や内容が確認できるようになります。PythonでCGIを書いている人 ...

Python
April 12, 2016

ロリポップでweb.pyが使えなくなった

# ロリポップでweb.pyが使えなくなったロリポップのサーバーを新サーバーに移行したら、Pythonのフレームワーク「web.py」が使えなくなってしまいました。> WEBサーバー移設メンテナンスのお知らせ - 2016年01月15日 12時00分 / メンテナンス情報 / お知らせ - レンタルサーバーならロリポップ!<br><https://lolipop.jp/info/mainte/5189/>原因はよく分かりませんが、mime.typesでPermission deniedとなるようです。<s ...

Python ロリポップ
April 11, 2016

Pythonでお手軽Webサーバー

# Pythonでお手軽WebサーバーPythonにはHTTPサーバー用のモジュールが組み込まれていて、HTML/CSSの表示確認などでとても便利です。## Python2向け使い方は表示したいディレクトリに移動して、Pythonを実行するだけです。$ cd path-to-www$ python -m SimpleHTTPServerポート番号を指定したい場合は次のようにします。<sup>注</sup>$ python -m SimpleHTTPServer 8080後は好きなブラウザから指定したポート ...

Python
March 08, 2016

PythonでPunycodeに変換する

# Pythonで日本語ドメインの変換Pythonを使ってPunycode表記に変換する方法## 日本語ドメイン名をPunycode表記に変換>>> u'日本語.jp'.encode('idna')'xn--wgv71a119e.jp'## Punycode表記を日本語ドメイン名に変換>>> 'xn--wgv71a119e.jp'.decode('idna')u'\u65e5\u672c\u8a9e.jp'>>> print 'xn--wgv71a119e.jp'.decode('idna')日本語.jp ...

Python ドメイン
July 29, 2015

Pythonで数式処理

# Pythonで数式処理Pythonで数式処理をしたい場合は、SymPyが良さそうです。> SymPy<br><http://www.sympy.org>## ライセンスLicensed under BSD## 使い方__モジュールのインポート__>>> from sympy import *__シンボル`x`, `y`で計算__>>> x, y = symbols('x y')>>> expr = x + 2*y>>> expr + 1x + 2*y + 1>>> expr - x2*y`expr - ...

Python
July 13, 2015

Pythonでカレンダーを表示する

# Pythonでカレンダーを表示するPythonでは、calendarというモジュールを使うと簡単にカレンダーを表示できます。## 使い方>>> import calendar>>> text = calendar.TextCalendar()>>> text.formatmonth(2015,1)January 2015Mo Tu We Th Fr Sa Su1 2 3 45 6 7 8 9 10 1112 13 14 15 16 17 1819 20 21 22 23 24 2526 ...

Python
May 12, 2015

webpyのsession.DiskStore concurrency問題

# web.pyのsession.DiskStore concurrency問題web.pyのsession.DiskStore concurrency問題の対策A possible solution is to update session.DiskStore.setitem to become:def __setitem__(self, key, value):path = self._get_path(key)pickled = self.encode(value)try:tname = path+ ...

Python
May 03, 2015

Obraz

Obraz=====Pythonで作られたStatic site generator> Obraz - static site generator in a single Python file mostly compatible with Jekyll<br><http://obraz.pirx.ru/>Jekyllと似た動作で、わずか800行のコードで作成されている。 ...

Python ブックマーク
January 17, 2015

PythonでUnicodeのオブジェクトとコードポイントの変換

# PythonでUnicodeのオブジェクトとコードポイントの変換UnicodeオブジェクトをUnicodeコードポイントに変換>>> ord(u'あ')12354UnicodeコードポイントをUnicodeオブジェクトに変換>>> unichr(12354)u'\u3042'>>> print unichr(12354)あちなみに、8ビット文字列に`ord`を使うとASCIIコードを取得できます。>>> ord('a')97>>> chr(97)'a'>>> unichr(97)u'a' ...

Python 文字コード
January 03, 2015

Pythonのデコレータ

Pythonのデコレータ==================Pythonでは、@キーワードを使って関数などのオブジェクトをmodifyできます。<sup>注</sup>>>> @dec... def func():... passと書くと、実際には>>> def func():... pass...>>> func = dec(func)の動作となり、関数`func`をmodifyできる形になります。ちなみに、このデコレータはネストも可能で、>>> @dec2... @dec1... def fu ...

Python
December 17, 2014

Pythonで全角を2文字として文字数を数える方法

Pythonで全角を2文字として文字数を数える方法===========================================Pythonの文字列は`len`関数で文字数をカウントできますが、全角と半角の区別はしません。>>> len(u'abcde')5>>> len(u'あいうえお')5これはこれで便利な実装なのですが、日本語のテキスト処理をしていると、等幅フォントを使ったときに幅をそろえたいなどで、全角を2文字として数えると何文字になるか調べたいことがあります。そういう場合には`unico ...

Python 文字コード
November 18, 2014

urllibでBasic認証やDigest認証を使うサンプル

urllibでBasic認証やDigest認証を使うサンプル===========================================urllibでBasic認証を使うサンプル------------------------------->>> import urllib2>>> mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()>>> mgr.add_password(None, 'http://example.com/', 'username', ...

Python 認証
September 18, 2014

Pythonのdict型をソート

Pythonのdict型をソート======================Pythonのdict型を並べ替えたいことがあると思います。いろいろ方法はあるかと思いますが、`sorted`を使うのが簡単そうです。>>> d = { 'aaa': 10, 'ccc': 20, 'ddd': 30, 'bbb': 40 }>>> for k, v in sorted(d.items(), key = lambda x: x[0]):... print k, vaaa 10bbb 40ccc 20ddd 30 ...

Python
March 25, 2014

Pythonの新しい文字列書式操作

# Pythonの新しい文字列書式操作`format`を使った新しい文字列の書式操作<sup>注</sup>は、`{}`を使って次のようにします。>>> '{0} + {1} = {2}'.format(1, 2, 1+2)'1 + 2 = 3'`{0} {1} {2}`が順になっている場合はポジション引数は省略可能です。>>> '{} + {} = {}'.format(1, 2, 1+2)'1 + 2 = 3'キーワード引数は次のように使います。>>> 'Hello {name}!'.format(n ...

Python
March 24, 2014

Pythonのリストから重複を削除

Pythonのリストから重複を削除===========================Pythonのリストから重複を削除する方法。<sup>注</sup>いろいろあると思いますが、手軽そうなのをピックアップしてみました。setを使う方法------------->>> a = [3, 1, 2, 4, 2, 1]>>> list(set(a))[1, 2, 3, 4]setを使って順序を戻す方法------------------------>>> sorted(set(a), key=a.index) ...

Python
December 26, 2013