新山が Python を使っていくうえで作りためた
簡単なコマンドやライブラリをまとめています (の、予定)。
Python 関連文書も興味があればご覧ください。
なお、ここで公開しているファイル/文書は特に断りがある場合を除きすべて public domain (一部 MIT/X ライセンス) とします。 新山祐介はこれらのプログラムについていかなる責任も負いません。
clitrans.py
sortbydate.py
vnc2flv
Pyntch
tenjiwp.py
PDFMiner
homesync.py
des.py
Shaling
Fooling
flv2mp3.py
jacus.py
PyVnc2swf
Webstemmer
textcrawler.py (Webstemmer に統合されました)
mp3cat.py
unagi.py
s.py
netmonitor.py
html2txt.py (Webstemmer に統合されました)
pycdb.py
unimap.py
pyfetchmail.py
watcher.py
tateiscanna.py
$ ./tateiscanna.py LIST リニトカ $ ./tateiscanna.py トントカイモ SYSTEM
PyOne
pgrep.py
makegif.py
fuser.py
iters.py
romm.py
chnum.py
一億五千万 → 150000000)
bidi.py
pdfparser.py
swfparser.py
encdet.py
abstfilter.py
pstring.py
regpat.py
texparser.py
lcs.py
sexpr.py
reg.py
def forall(pred, seq): # inefficient return reduce(lambda r,x: r and pred(x), seq, True)
def exists(pred, seq): # inefficient return reduce(lambda r,x: r or pred(x), seq, False)
一方の配列をみて他方に代入する場合:
for (i,x) in enumerate(seq1):
if condition(x):
seq2[i] = x
代入の必要がない場合:
for (x,y) in zip(seq1, seq2): # itertools could speed it up
if condition(x,y):
...
同値類をまとめる:
def equivalence(feqv, objs):
eqs = []
for x in objs:
eq1 = [x]
i = 0
while i < len(eqs):
if exists(lambda y:feqv(x,y), eqs[i]):
eq1.extend(eqs[i])
del(eqs[i])
else:
i += 1
eqs.append(eq1)
return eqs
print equivalence(lambda x,y:(x%5)==(y%5), [1,1,2,3,4,5,1,2,3,4,0])
# => [[1,1,1], [2,2], [3,3], [4,4], [0,5]]
zip を使う。(from 人生の敗北者スレ)
>>> apply(zip, [[1,2], [3,4]]) [(1, 3), (2, 4)]
python -u と同様の効果を起動後に実現する
import sys, os sys.stdin = os.fdopen(0, "rb", 0) sys.stdout = os.fdopen(1, "wb", 0) sys.stderr = os.fdopen(2, "wb", 0)
import sys
def main(argv):
import getopt
def usage():
print 'usage: %s [-a] [-b] [-c arg] [-d arg] [file ...]' % argv[0]
return 100
try:
opts, args = getopt.getopt(argv[1:], 'abc:d:')
except getopt.GetoptError:
return usage()
(opta, optb, optc, optd) = (False, False, None, None)
for (k, v) in opts:
if k == '-a': opta = True
elif k == '-b': optb = True
elif k == '-c': optc = v
elif k == '-d': optd = v
doit(args)
return 0
if __name__ == '__main__': sys.exit(main(sys.argv))
Last Modified: Sat Feb 27 07:52:38 UTC 2010
Yusuke Shinyama