Python Toys
back
[Japanese]
The following files are in public domain except where otherwise noted.
THESE FILES COME WITH ABSOLUTELY NO WARRANTY.
Articles
Crappy tools
-  webapp.pyandrunapp.py
-  A simplistic Web application framework and its testing server.
-  clitrans.py
-  Generate a simple-formatted text reference for C# standard libraries.
-  sortbydate.py
-  Sort the files by its date and display the older (or newer) files first.
-  vnc2flv
-  Another screen recorder.
-  Pyntch
-  Python static code analyzer. Detects possible runtime errors before acually running the code.
-  PDFMiner
-  PDF parser and interpreter written entirely in Python. Useful for text extraction / analysis for PDF.
-  homesync.py
-  An Rsync wrapper. Useful to manually synchronize directories which are *almost* identical.
-  des.py
-  SSLeay des.pl function ported into Python.
-  flv2mp3.py
-  Extract a MP3 file from a FLV (Flash Video) file.
-  Logweeder
-  A log analyzer. It scans UN*X logs (syslog), categorizes common events, and discovers uncommon events automatically.
-  jacus.py
-  Simple Jabber client. You need jabber.py.
-  PyVnc2swf
-  Tiny screen recorder. Converting VNC session into Macromedia Flash file. Pygame is required.
-  Webstemmer
-  HTML layout analyzer which extracts body and title from news sites, without mixing up with banners or ads.
-  textcrawler.py(now included in Webstemmer package)
-  A skeleton of tiny web crawler. 
 Gzip-encoding, HTTP persistent connection, robots.txt, Cookies, and multi-threading are supported.
-  mp3cat.py
-  Tiny mp3 frame editor. It can concatinate or splice MP3 frames without loss of audio quality.
-  unagi.py
-  P2P-like system monitoring tool.
-  s.py
-  A simple port forwarder using asyncore.
-  netmonitor.py
-  A network monitor for Linux with flickering pixel at the top-left corner
of the screen. Python 1.5.2 or newer. Tkinter is needed.
-  html2txt.py(now included in Webstemmer package)
-  Extract texts from HTML. It removes JavaScript and stylesheets.
Each paragraph is combined into one line. Python 2.0 or newer.
-  pycdb.py
-  A Python implementation of cdb. For learning.
-  unimap.py
-  Generate a Unicode character map in EUC-JP encodings.
-  pyfetchmail.py
-  Fetch emails via pop3 and deliver a Maildir on your home directory. qmail package is needed.
-  watcher.py
-  Notify new mail on GNU Screen's status line. Used with pyfetchmail.py.
-  PyOne
-  Python One-liner helper.
-  pgrep.py
-  A grep for millions of parallel patterns.
-  makegif.py
-  Create a transparent gif from a bitmap. Python Imaging Library is required.
-  fuser.py
-  Display all files opened by any process. I wouldn't write this if I knew lsof.
Libraries
-  iters.py
-  Common iterator/generator functions.
-  bidi.py
-  Bidirectional File Object. It supports backward readline.
-  pdfparser.py
-  Dumb PDF parser. It just parses and doesn't do anything useful.
(This is integrated into PDFMiner package above.)
-  swfparser.py
-  Extracts text strings from a Macromedia Flash file.
-  encdet.py
-  An experiment for automatic encoding detection.
-  abstfilter.py
-  A simple framework for pipelining between objects.
-  pstring.py
-  An extended string class which remember their origin. Each character
knows the file and position where it comes from and holds the information
even when split.
-  regpat.py
-  Regular expression matcher for general sequence. A matching between elements 
can be  a procedre. An action which is performed when matched can also be
a procedure. Reverse matching will be supported in future.
-  texparser.py
-  A simple parser of LaTeX. Similar to sgmllib.
-  lcs.py
-  Calculate the Longest Common Subsequence.
-  sexpr.py
-  An S-expression parser. Convert S-exps into Python lists.
-  reg.py
-  Easy-to-use regexp wrapper. You don't need to compile regexp patterns.
Tips
forall (does the function pred return true for all of elements in seq?):
def forall(pred, seq):
  return reduce(lambda r,x: r and pred(x), seq, True)
exists (does there exist an element which the function pred returns true?):
def exists(pred, seq):
  return reduce(lambda r,x: r or pred(x), seq, False)
Mapping multiple arrays with enumerate, zip:
Copying one array to another.
for (i,x) in enumerate(seq1):
  if condition(x):
    seq2[i] = x
When assignment is not needed:
for (x,y) in zip(seq1, seq2):
  if condition(x,y):
    ...
Handling sets:
Calculate the equivalences of a set:
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]]
Transpose a matrix (= sequence of sequences):
 Use zip.
>>> apply(zip, [[1,2], [3,4]])
[(1, 3), (2, 4)]
Similar effect of 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)
Typical use pattern of getopt:
if __name__ == "__main__":
  import sys, getopt
  def usage():
    print "usage: foo.py [-a] [-b] [-c arg] [-d arg] [file ...]"
    sys.exit(2)
  try:
    opts, args = getopt.getopt(sys.argv[1:], "abc:d:")
  except getopt.GetoptError:
    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)
  sys.exit(0)
Last Modified: Sat Aug 14 06:59:31 UTC 2010
Yusuke Shinyama