python2.4以上を想定しています。


正規表現

  • コンパイルする方法
    • 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接続

  • 普通に接続してデータを取ってくる
    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によるバイナリ
  • クッキーの管理。
    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と引数の扱いは同じ。

文字コードの変換

文字列のエンコーディングを変換するには次のようにすればよい。(2.4)

str.encode("cp932")
str.decode("euc-jp")

UTF-8の内部コードを直接ソースファイルに書くには

u"あいうえお"

みたいに文字列の頭にuをつける。

r"あいうえお"

みたいにrをつけるとraw文字列(?)というのになるらしい。文字列のバイトをそのままという意味か?

ヘルプの引き方、モジュールのメンバの調べ方

  • dir(module)
    モジュールのメンバー一覧
  • help(module)
    モジュールのヘルプ
help('modules') #利用可能なモジュールの一覧

コマンドライン引数の処理

引数は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

f = open('file_name', mode)

モード

  • 'r' 読み込み
  • 'w' 書き出し
  • 'a' 追加書き出し
  • 'b' バイナリ(不明)
  • 'br' バイナリ読み込み
  • 'bw' バイナリ書き出し

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

for line in fileobj:

ファイル操作

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


Attach file: file_ssl.zip 201 download [Information]

|New|Edit|Freeze|Diff|Backup|Upload|Copy|Rename|
Last-modified: 2005-09-20 (Tue) 00:00:00 (1066d)
HTML convert time: 0.084 sec.