***Pythonの使い方を忘れないようにメモ。 [#ra453327]
python2.4以上を想定しています。
#contents
----
***正規表現 [#tf600fdc]
-コンパイルする方法
--findall
findallは見つかった文字列を全てリストにして返す。
 import re
 p = re.compile("ab.", re.I)
 result = p.findall("AbdABCAAbb")
 print result
--finditer
--match
matchは先頭の文字列がマッチしたらマッチオブジェクトを返す。何もマッチしない時はNone。
 import re
 p = re.compile("ab.", re.I)
 result = p.match("Abd")
 print result.group()
--scanner
--search
searchは文字列がマッチしたらマッチオブジェクトを返す。
 import re
 p = re.compile("ab.", re.I)
 result = p.search("xxxAbd")
 print result.group()
--split
--sub
subはマッチした文字を全て置き換える。
 import re
 p = re.compile("ab.")
 print p.sub("xxx", "abcdeaabcde")
--subn
subnはマッチした文字を全て置き換えて、置き換えた回数とあわせてタプルを返す。
 import re
 p = re.compile("ab.")
 print "結果:%s \n%s回置換え" % p.subn("xxx", "abcdeaabcde")

-コンパイルしないでも使うことができる
 m = re.match("a.", abacaad", re.I)
 l = re.findall("a.", "abacaad", re.I)
 s = re.sub("a.", "A", "ababac")
 など

-複数のマッチした文字列のサブマッチのリストを返す
 mlist = re.findall("(ab..)ef(..)", "abcdefghabddefgg")
 for (a,b) in mlist:
     print (a, b)

-日本語
日本語の取り扱いはややこしいので全部UTF-8に変換したうえで扱うのがわかりやすくてよい。
 import re
 for w in re.findall(u"あ.", u"あいうあえあ"):
     print w


***HTTP/HTTPS接続 [#dc396018]
-普通に接続してデータを取ってくる~
 import urllib
 d = urllib.urlopen("http://www.yahoo.co,jp")
 print d.read().decode("euc-jp")
 d.close()
まあ簡単にはこんな感じ。

-httpsの場合~
_sslモジュールが必要なのだが、ActivePythonには入っていないので自分でコンパイルしてC:\Python24\DLLsに入れておく。これはPython2.4.1とOpenSSL0.9.8によるバイナリ~
#ref(_ssl.zip) 

-クッキーの管理。~
cookielibというのは2.4かららしい。
 import urllib2, cookielib
 cj = cookielib.CookieJar()
 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
 r = opener.open("http://www.google.com/")
これでcjが生きてる間はrを閉じたり別のインスタンスからurlを開いたりしても同じドメインに接続するならクッキーのやり取りを自動でやってくれる。クッキーのファイルを読み書きするやつもあるらしい。

-UAの偽装
 urllib.FancyURLopener.version = "MyAPP 1.1"
みたいにやってもできるみたいだが、このやりかたはなぜか知らんがあまり使われていないようだ。多くの場合マニュアルに書いてあるとおり次のようにしているようだ。
 class AppURLopener(urllib.FancyURLopener):
     def __init__(self, *args):
         self.version = "App/1.7"
         urllib.FancyURLopener.__init__(self, *args)
 
 urllib._urlopener = AppURLopener()
なんか無意味に回りくどい気がする・・・。~
urllib2の場合は、
 opener = urllib2.build_opener()
 opener.addheaders = [('User-agent', 'My App 2.4')]
 d = opener.open("http://hogehoge")
みたいにする。

-POST送信
 import urllib
 params = urllib.urlencode({'user': myid, 'pass': mypass})
 d = urllib.urlopen("http://hogehoge/login", params)
GET送信の場合は、第二引数を渡さないように
 urllib.urlopen("http://hogehooge/login?%s" % params)
みたいにする。
urllib2のopenerの場合もurlopenと引数の扱いは同じ。

***文字コードの変換 [#qdcb5f5f]
文字列のエンコーディングを変換するには次のようにすればよい。(2.4)
 str.encode("cp932")
 str.decode("euc-jp")
UTF-8の内部コードを直接ソースファイルに書くには
 u"あいうえお"
みたいに文字列の頭にuをつける。
 r"あいうえお"
みたいにrをつけるとraw文字列(?)というのになるらしい。文字列のバイトをそのままという意味か?

***ヘルプの引き方、モジュールのメンバの調べ方 [#l09c5a43]
-dir('''module''')~
モジュールのメンバー一覧
-help('''module''')~
モジュールのヘルプ

 help('modules') #利用可能なモジュールの一覧


***コマンドライン引数の処理 [#fcb66e18]
引数はsys.argvにリスト形式で入っている。またオプション引数の解析はgetoptが使える。~
 getopt(args, shortopts, longopts=[])
-shortopts は一文字。値をとる場合は:をつける(例 -v -n 10のような場合"vn:")
-longoptsは長いオプション名。省略可。値をとる場合は=をつける(例--help --width 10のような場合、["help", "width="])

getoptを使った引数の解析。
 import sys, getopt
 try:
     optlist, args = getopt.getopt(sys.argv[1:], "hs:", longopts=["help", "size="])
 except getopt.GetoptError:
     #エラー処理
     sys.exit(0)
 
 for opt, args in optlist:
     if opt in ("-h", "--help"):
         hogehoge
     if opt in ("-s", "--size"):
         fugofugo

***ファイルIO [#v4230c1a]
 f = open('file_name', mode)
モード
-'r' 読み込み
-'w' 書き出し
-'a' 追加書き出し
-'b' バイナリ(不明)
-'br' バイナリ読み込み
-'bw' バイナリ書き出し

ファイルオブジェクトから一行ごとに取り出すには
 for line in fileobj:

***ファイル操作 [#aae4789f]
 os.tmpfile()           一時ファイルのファイルオブジェクトを返す
 os.chdir(path)         chdir
 os.getcwd()            pwd
 os.chmod(path,mode)    chmod
 os.listdir(path)       pathに含まれるファイルとディレクトリのリスト
 os.mkdir(path[,mode])  ディレクトリ作成
 os.mkdirs(path[,mode]) 再帰的なディレクトリ作成
 os.remove(path)        ファイル削除
 os.removeddirs(path)   再帰的なディレクトリ削除
 os.rename(src, dst)    改名
 os.renames(old, new)   再帰的にパスを削除&作成する
 os.rmdir(path)         ディレクトリ削除
 
 glob.glob("*.exe")     ワイルドカードによるファイルのリスト
 
 os.path.abspath(path)
 os.path.basename(path)
 os.path.dirname(path)
 os.path.exists(path)
 os.path.expanduser(path)       ~をユーザーのホームの置き換える
 os.path.expandvars(path)       環境変数を展開する$name, ${name}
 os.path.getatime(path)
 os.path.getttime(path)
 os.path.getctime(path)
 os.path.getsize(path)
 os.path.isabs(path)
 os.path.isfile(path)
 os.path.isdir(path)
 os.path.islink(path)
 os.path.ismount(path)
 os.path.join(path[,path...])   パスの結合
 os.path.normcase(path)
 os.path.normpath(path)
 os.path.realpath(path)
 os.path.samefile(path1, path2)
 os.path.sameopenfile(fp1, fp2)
 os.path.split(path)            headとtailに分解
 os.path.splitdrive(path)       drive, tailに分解
 os.path.splittext(path)         root, extのペア

-再帰的にファイルを収集(2.2以下の場合)
 import os
 def printFiles(arg, dir, files):
     for f in files:
         print os.path.join(dir, f)
 os.path.walk("C:\python24", printFiles, None)
-再帰的にファイルを収集(2.3以上の場合)
 import os
 for root, dirs, files in os.walk("C:\python24"):
     for fname in files:
         print os.path.join(root, fname)

----
[[CategoryPython]]


HTML convert time: 0.005 sec.