2008-01-01から1年間の記事一覧

受信メールのタイトルを取得する

poplibモジュールの勉強の続き。 まずは下調べをするためにとりあえずメールサーバにログインしておく。 後で使うので emailモジュールもインポートしておく。 >>> import poplib, email >>> server = "mail.xxxx.co.jp" >>> user_id = "xxxx" >>> user_pass…

poplibモジュール

受信したメールを処理するプログラムをpythonで書きたいので、 まずは poplibモジュールの勉強。参考にさせていただいたのは http://nagosui.org:8080/Nagosui/COREBlog2/categories/learning-python/cbcategory_view?b_start:int=9&-C= のページです。 この…

Factory Methodパターン

結城浩さんの「Java言語で学ぶデザインパターン入門」を題材にpythonでデザインパターンを 書いてみる。今回の題材はFactory Methodパターン。 前回書いたTemplate Methodパターンはスーパークラスで処理の大枠を作って、サブクラスで 具体的処理を決定する…

Template Methodパターン

結城浩さんの「Java言語で学ぶデザインパターン入門」を題材にpythonでデザインパターンを 書いてみる。 今回はTemplate Methodパターン。 どんなものかというと、スーパークラスにテンプレートとなるメソッドが定義される。 ただその定義の中ではメソッドは…

Adapterパターン

結城浩さんの「Java言語で学ぶデザインパターン入門」を題材にpythonでデザインパターンを 書いてみる。 今回はAdapterパターンがテーマで、与えられた文字列を(Hello)のように表示したり、*Hello*のように表示するプログラム。 クラスによるパターン(継承…

super関数

super()関数を使うとベースクラスのメソッドを呼べるみたい。 具体的に試してみる。 まずはOneというクラスを作ってメソッドを定義して、Oneクラスを継承するTwoというクラスを作る。 >>> class One(object): ... def fone(self): ... print "one" ... >>> c…

ポリモーフィズム

ポリモーフィズムって何なのかってことをつかむために「じゅんいち☆かとうの技術日誌」さんhttp://d.hatena.ne.jp/j5ik2o/20080508/1210246936 に書かれていたサンプルをpythonで書いてみた。 Javaのサンプルコードをそのままpythonに適用しただけなので、基…

クラス-クラスを作る-

pythonの標準モジュールには多くのクラスが既に定義されているらしいが、 独自に作ることもできるらしい。 「みんなのPython」に書かれている例の通りにブックマーククラスを定義してみる。 定義にはclass文を使って、つづいてクラスの名前を添えるらしい。…

クラス-Setクラス-

今回はクラスについて学習。 クラスがどんなものかというとプログラムで使う部品の設計図というイメージらしい。 クラスを基にインスタンスオブジェクトという部品を作ってプログラムを組み立てていく とのこと。pythonには文字列型やリスト型のような組み込…

lambda式

lambda式を使うと、引数を基に簡単な処理を行う関数のように働く処理を シンプルに書けるみたい。例えば三つの数をかけた値を返す関数を普通に定義して使うと、 >>> def hoge(x, y, z): ... return x*y*z ... >>> hoge(2, 4, 3) 24これをlambda式で書いて使…

ジェネレータ

今回はジェネレータについて学習。 まずはジェネレータって何なのかというところから。 ジェネレータは関数の一種らしい。普通の関数はすべての処理が終わってから return文で結果を返すけど、ジェネレータ関数は関数を動かしつつyield文で 何度も結果を返せ…

イテレータ

今回はイテレータについて学習。 まずはイテレータって何なのかというところから。 イテレータは複数の要素を持ったデータから要素を順番に取り出していくときに、 インデックスのような特定の形式のデータだけに利用できる方法を使わないみたい。 代わりに…

python練習プログラム

作業ディレクトリからcsvファイルを選んで処理を行うプログラムを書いてみた。 処理を行っている最中に同じプログラムを動かしたときに、同一のファイルが再び処理されて しまうのを防ぐためにファイルを開いたときと処理が完了したときにファイル名が変更さ…

スクリプトファイル自体のパス

pythonでスクリプトファイル自体があるディレクトリのパスを 取得するには、 import os os.path.dirname(os.path.abspath(__file__)) とすれば良いみたい。 os.path.abspath(__file__)でスクリプトファイルの絶対パスを取って、 それをos.path.dirname()の引…

関数に与える引数の展開

関数に与える引数にアスタリスクを付けることによって 引数を展開させることができるみたい。 例えば、datetimeモジュールのdateという関数はdate(year, month, day) のように3つの引数を必要とする。 また、timeモジュールのstrptimeという関数はstrptime(…

キーワード引数を受け取る関数

関数の引数の前にアスタリスクを2個付けるとキーワード指定した未定義の 引数を受け取れるみたい。 >>> def hoge2(a,b, **value): ... print a,b,value ... >>> hoge2(1,2,c=3,d=4) 1 2 {'c': 3, 'd': 4} >>> hoge2(1,2,3,4) Traceback (most recent call l…

引数リストを受け取る関数

関数の引数の前にアスタリスクを付けるとキーワード指定の無い引数を いくつでも受け取れるようになるみたい。 >>> def hoge(a, b, *value): ... print a, b, value ... >>> hoge(1,2,3,4,5,6) 1 2 (3, 4, 5, 6) >>> hoge(1,2,c = 3,4,5,6) File "<stdin>", line 1 </stdin>…

正規表現

pythonで正規表現を使うにはreモジュールを使って正規表現をオブジェクト型に コンパイルしてマッチさせることができるようになるみたい。 基本的な例で"day"という文字列が"today"という文字列にマッチするかを 確かめるなら文字列を走査して正規表現がマッ…

ファイル操作

perlでfile.txtというファイルを開くときはopenという関数を使って、 open(FILE, 'file.txt') or die "$!"; のようにすれば良いみたい。開くことができなかったときはエラーメッセージを出して 終了するようにしている。 openの最初の引数はファイルハンドル…

サブルーチンと関数

perlにおけるサブルーチンというものはpythonには無くて、 pythonではすべては関数として定義しなければならないみたい。 なのでperlのサブルーチンを定義するのをpythonの関数を定義することに 当てはめて練習してみる。 まずは2つの数値の平均値を求める…

mapによる繰り返し

リストや配列の各要素に対して何らかの操作を行い、その結果を 新たなリストで得たいときにはmap関数が便利らしい。 perlのmap関数は map { 各要素をつくる式 }リスト というように使うらしい。 例えば1〜9までの整数を要素として持つリストから 各整数を…

ハッシュと辞書型

perlのハッシュとはキーとそれに対応する値からなるデータ構造で 以下のように表すみたい。 my %hash = ( 'Taro' => 26, 'Hanako' => 23, 'Ichiro' => 32, ); pythonではハッシュに対応するのは辞書型で、 hash = {"Taro" : 26, "Hanako" : 23, "Ichiro" : 3…

配列とリスト

perlで配列を使って三つの数値の合計を計算するときは、 my @score = (64, 90, 75); my $sum = 0; foreach my $item (@score) { $sum = $sum + $item; } print $sum; とすると229と出力されるみたい。 これをpythonで処理するにはリストとsum関数を使って、 …

文字列処理関数

perlでは文字列の一部を切り出すときにはsubstr関数を使うようで、 例えば'Good morning'という文字列の最初の4文字を得るときは my $s = substr('Good morning', 0, 4); print $s; とすればGoodと返される。 pythonで同じ処理をするにはリストの要素を取り…

16進数文字列、8進数文字列の数への変換

perlでは16進数で書かれた文字列を数に直すには関数hexを使うようで、 print hex('FF'); とすると 255 と出力される。 8進数で書かれた文字列を数に直すには関数octを使うようで、 print oct('177'); とすると 127 と出力される。 pythonで同じ処理をするに…

10進数から16進数への変換

perlでは関数splintfを使うと、いろいろな書式で数を文字列に変換できるようで、 my $value = 255; my $str = splintf('%X', $value); print $str; とすれば FF と出力される。 pythonでは関数splintfは無いようなので、 value = 255 str = "%X" %value prin…

日本語を含むメール送信プログラム

日本語を含むメール送信プログラムをpythonで書いた。 スクリプトは以下の通り。 # -*- coding: utf-8 -*- import smtplib from email.MIMEText import MIMEText from email.Header import Header from email.Utils import formatdate def send(from_addr, t…

メール送信プログラム

基本的なメール送信プログラムをpythonで書いた。 スクリプトは以下の通り。 import smtplib from email.MIMEText import MIMEText from email.Utils import formatdate def create_message(from_addr, to_addr, subject, body): msg = MIMEText(body) msg['…

エクセル添付ファイル付きメール送信プログラム

添付ファイルとしてエクセルのファイルを添付したメールを送信するプログラムをpythonで書いた。 参考にさせていただいたのは以下のサイト。 http://labs.unoh.net/2007/06/python_2.html http://semanticlog.blogspot.com/2008/02/python-smtp.html http://…

リスト内包表記の記法

テキストの例に従って学習 文字列の各文字を文字コードに変換してリストを作る処理をfor文を使うと以下のように書ける 柴田淳著みんなのpythonより引用 >>> clist = [] >>> for s in "Python": ... clist.append(ord(s)) #組み込み関数ord()で文字コードに変…