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")
など
HTTP/HTTPS接続 †
- httpsの場合
_sslモジュールが必要なのだが、ActivePythonには入っていないので自分でコンパイルしてC:\Python24\DLLsに入れておく。これはPython2.4.1とOpenSSL0.9.8によるバイナリ
- 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