[Next] [Previous] [Up] [Top]

もうちょっと複雑な例題

もうちょっと,複雑なプログラムを紹介しましょう(オブジェクト指向ではないのですが)。
CSV形式のファイルをHTML形式の表(テーブル)の表現に変換するプログラムです。
説明のために,行頭に行番号を入れてあります。くれぐれも,字下げがブロックを表わしていることをお忘れなく。
# regsubを使っているところはちょっと古いです(^^;
# Python1.5から,reがお勧めです。
# また,Windowsで使うために作ったので,#!...は入れていません。

 1: #
 2: # convert csv-format file into html file
 3: #
 4: # usage:
 5: #   python csv2html.py [-d Delim] [-t Title] [-b Border] [-c Caption]
 6: #       Delim   : delimiter; default is comma.
 7: #                   'c' or 'comma' -- comma
 8: #                   's' or 'space' -- space
 9: #                   't' or 'tab'   -- tab
10: #       Title   : HTML title; when specified, whole HTML file generated.
11: #       Border  : table border; default is 1.
12: #       Caption : table caption
13: 
14: import sys
15: import string
16: import regsub
17: import getopt
18:
19: def csv2html(delim=',', title=None, border='1', caption=None):
20:     if title:
21:         sys.stdout.write('<html>\n')
22:         sys.stdout.write('<head>\n')
23:         sys.stdout.write('<title>\n')
24:         sys.stdout.write(title + '\n')
25:         sys.stdout.write('</title>\n')
26:         sys.stdout.write('</head>\n')
27:         sys.stdout.write('<body>\n')
28:     sys.stdout.write('<table border=' + border + '>\n')
29:     if caption:
30:         sys.stdout.write('<caption>\n')
31:         sys.stdout.write(caption + '\n')
32:         sys.stdout.write('</caption>\n')
33:     while 1:
34:         line = sys.stdin.readline()
35:         if not line: break
36:         line = line[:-1]
37:         rows = string.splitfields(line, delim)
38:         sys.stdout.write('<tr>')
39:         for r in rows:
40:             r = regsub.gsub('&', '&amp;', r)
41:             r = regsub.gsub('"', '&quot;', r)
42:             r = regsub.gsub('<', '&lt;', r)
43:             r = regsub.gsub('>', '&gt;', r)
44:             # r = regsub.gsub('\r', '<br>', r)
45:             if r == '': r = '&nbsp;'
46:             sys.stdout.write('<td>')
47:             sys.stdout.write(r)
48:             sys.stdout.write('</td>')
49:         sys.stdout.write('</tr>\n')
50:     sys.stdout.write('</table>\n')
51:     if title:
52:         sys.stdout.write('</body>\n')
53:         sys.stdout.write('</html>\n')
54: 
55: def printusage():
56:     sys.stdout.write("Usage:\n")
57:     sys.stdout.write("  python csv2html.py [-d Delim] [-t Title] [-b Border] [-c Caption]\n")
58:     sys.stdout.write("    Delim   : delimiter; default is comma.\n")
59:     sys.stdout.write("                'c' or 'comma' -- comma\n")
60:     sys.stdout.write("                's' or 'space' -- space\n")
61:     sys.stdout.write("                't' or 'tab'   -- tab\n")
62:     sys.stdout.write("    Title   : HTML title; when specified, whole HTML file generated.\n")
63:     sys.stdout.write("    Border  : table border; default is 1.\n")
64:     sys.stdout.write("    Caption : table caption\n")
65: 
66: def _main():
67:     try:
68:         opts, args = getopt.getopt(sys.argv[1:], 'd:t:b:c:')
69:     except:
70:         printusage()
71:         sys.exit(-1)
72: 
73:     d = ','
74:     t = None
75:     b = '1'
76:     c = None
77:
78:     for (opt, arg) in opts:
79:         if opt == '-d':
80:             if arg == 'c' or arg == 'comma': d = ','
81:             elif arg == 's' or arg == 'space': d = ' '
82:             elif arg == 't' or arg == 'tab': d = '\t'
83:             else:
84:                 printusage()
85:                 sys.exit(-1)
86:         if opt == '-t': t = arg
87:         if opt == '-b': b = arg
88:         if opt == '-c': c = arg
89: 
90:     csv2html(delim=d, title=t, border=b, caption=c)
91: 
92: if __name__ == '__main__': _main()

まぁ,見ていただければ,雰囲気は分かるでしょう。


[Next] [Previous] [Up] [Top]