40secと表記したり、時間の構成要素から人間が理解しやすい時刻表記に正規化する方法。標準モジュールではないですが、定番のdateutilsモジュールを使うのが楽です。使えますが、月の加算はできません。relativedeltaが使えます。ライブラリをインストールします。することで直感的に1ヶ月加算することができます。0)これを応用することで簡単に月末日を得ることもできます。itertoolsコメントをどうぞpythonでのネストされたループを減らすためのよく知られた方法を考察。2重のネストループ程度であればありがちな例でも問題ないが、3重、4重となってくるとitertoolsのありがたみがわかる。(x,y))itertools.productを使って全通りの組み合わせを出す。(x,y))※itertoolsはイテレータを生成しているので、全通りの操作をするために膨大な件数の組み合わせを作ったとしてもメモリを大量に消費することはない。x,y,zの3つのネストでも同じようにネストせずに記述できる。ように取得したい場合。#部分文字列取得itertools.combinationsを使って、開始、終了インデックスの決定のパターンを取得する例。setのソート(sorted)コメントをどうぞリストをソートするにはsorted関数を使用する。sorted関数は、ソートしたリストを返す関数で渡したリストは変更されない。1]sorted関数は辞書(dict)のキーのソートやsetのソートにも使える。3]sorted関数のreverseをTrueにすれば逆順ソート。1]sorted関数のkeyを指定することで、任意の条件でソートすることができる。key関数が返す値でソートされる。以下の例はHogeオブジェクトのname属性を返す関数を指定したことで、name属性でソートしている。2:c]上の例では、name属性を返す関数をlambda式で指定したが、特定の属性を返す関数は、operatorモジュールのattrgetter関数を使えば簡単に作成できる。python-tkssskwith文で使えるコンテキストマネージャー型を作成するコメントをどうぞopenの時のようにwith文を使えるようにするには、contextlibモジュールのcontextmanagerデコレータを使えば簡単に実装できます。with文で使ってみる。python-tkssskabcモジュールで抽象クラス、抽象メソッドを作成するコメントをどうぞPythonは動的型づけというゆるい感じの片付けなので、サブクラスにメソッド実装を強制するような作りが(言語仕様としては)できないが、abcモジュールを使うことで抽象クラス・抽象メソッドを作成することができる。抽象クラスは、metaclassにabc.ABCMetaを指定して作成し、抽象メソッドには@abstractmethodデコレータを指定する。pass具象クラスは、普通にスーパークラスに指定して作成する。Circle(10)c.area()areaメソッドは、抽象メソッドになっているので実装しない場合には、インスタンス生成時にTypeErrorが発生する。areaエラーが発生するのは、インスタンス生成時でclassを定義した時点では発生しないので注意が必要。python-tkssskargparseでコマンドライン引数の解析2件の返信argparseは、コマンドラインプログラムの引数を解析するのに便利なモジュールで、C言語のgetopt的なものです。似たような機能をもつモジュールとしてgetoptモジュール(C言語のものと同等)、optparseモジュールがありますがそれらは古いモジュールで、argparseを使うのが推奨されてるようです。デフォルトでsys.argvを解析print(args.foo)このように作成したtest.pyファイルを、引数なしで実行してみます。argumentsエラーが発生して、簡易的なヘルプメッセージが表示されました。引数を指定することで解析は成功し、args.fooから引数の値を参照することができます。引数に、-fや–fooのようにハイフンで始まるようにするとオプション引数(位置で決まらない引数)になる。短い引数、長い引数、ヘルプあたりを指定するのが楽。引数が指定されたなかった時のデフォルト値を定義。1const指定フラグの指定のみで固定値が引数に設定される。1action指定action指定では、解析した引数をどのように格納するかを指定できる。store_trueアクションは、フラグが指定されたことでTrueが設定されるアクション。–helpはデフォルトでヘルプ機能になっているが、これが邪魔な場合は、add_help=Falseで作成すると良い。邪魔で消したものの、他のオプション引数でヘルプを使いたい場合は、action=”help”で追加すれば良い。-hは消して、–helpだけでヘルプを使う場合は、add_help=Falseで追加しないようにしてから、あらためて–helpをaction=”help”で追加する。FormEncodeコメントをどうぞFormEncodeはHTMLフォームからの送信を検証したり、HTMLフォームを生成したりする高機能なライブラリなのですが、最近ではあまりHTMLフォームを使わず、JSONデータのやりとりということも多いので、HTMLフォームは使わないことも多いと思います。入力チェックのバリデーション機能に関しては長い間メンテされていただけあって信頼に足ると思います。ここでは、バリデーション関数の使い方を紹介します。FormEncodevalidatorsたくさんのvalidatorがあります。ここでは整数をチェックするInt。greater似たようなValidatorがたくさんある。python-tkssskpython3のbytes型とstr型の比較と変換方法3件の返信python3では、文字列とバイト列の区別が明確になりました。python2でバイナリデータを文字列で扱っていたり、strとunicodeの使い分けで混乱していたのがスッキリしたと思いますが、python2から移行するとちょっと混乱したりするのでまとめて置きます。語弊のある書き方かもしれませんが、ありがちな使われ方の例としてマトリックスを作成しました。(u'')3では文字列はunicode文字列として扱われるようになったので、すべてpython2でいうところのu''になりました。u''表記してもエラーにはなりませんが(python3.3以上)同じ意味です。バイナリデータを扱うときには、bytes型に変換します。bytes型は文字列っぽく扱えますが、strとbytesの連結などはできないので用途に合わせて適切な型で持つようにします。特定の文字コードの文字列を持ちたい場合はbytes型になります。str文字列として加工などをして最終的に出力する際に、任意の文字コードのバイト列としてエンコードして出力するという使い方になります。strからbytesencodeでbytes型(utf-8)に変換します。bytesからstrdecodeで文字列に変換します。b'\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86'.decode('utf-8')'あいう'文字列のエンコードを意識した操作たとえばファイルへShift_JISエンコードの文字列を出力したい場合、Python3においてはそれはbytes型のバイナリデータの出力という意味になります。Python3の文字列は内部的にUnicodeで保持していますが、これをShift_JISにエンコードすることでbytes型のバイナリデータになります。(python2の時には、unicode文字列からstr文字列になっていました)ShiftJISやEUCの文字列を正規表現で比較したい場合Python3では、SJISやEUCの文字列はbytes型になってしまいますが、そのようなバイナリデータを正規表現でマッチングしたい場合にはどうすればよいでしょうか?通常のマッチングであれば、decodeによってUnicode文字列に変換してから、Unicode文字列の世界でマッチングすれば問題ありません。してもSJISの文字コードの範囲などでマッチングしたい場合は、パターン文字列もbytes型で記述することで可能です。※上記はどうしてもsjisの文字コードで正規表現パターンを作りたかったため行ったもの。'A'を探したいだけであれば、Unicode文字列に変換後にマッチングするほうが一般的。python-tkssskpropertyの作成コメントをどうぞPythonのクラスでは属性に直接読み書きができる。1@propertyデコレータで、読み取り専用のプロパティが作成できる。#'five'@property名.setterで書き込み可能なプロパティが作成できる。