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('&', '&', r) 41: r = regsub.gsub('"', '"', r) 42: r = regsub.gsub('<', '<', r) 43: r = regsub.gsub('>', '>', r) 44: # r = regsub.gsub('\r', '<br>', r) 45: if r == '': r = ' ' 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()
まぁ,見ていただければ,雰囲気は分かるでしょう。
#
’から行末まではコメントです。
'
”と二重引用符“"
”には,本質的な違いはありません。
def
’に続く部分が関数の宣言です。
=
’の右辺は,デフォルトの値(引数が省略されたときの値)です。
[ .. ]
’という表記は,リストの一部を取り出すことを表わしています。‘[i]
’という表記はi番目の要素を,‘[j:k]
’という表記はj番目からk番目の要素を表わします,jやkが省略されると,それぞれ先頭,末尾が仮定されます。36行目では,行末の改行文字を除く部分を求めています。
(opts, args)
’と書いたのと同じです。
except
’はC++やJavaで言えば‘catch
’です。ここではすべての例外を拾っています。
__name__ == '__main__'
”というのは,「このプログラムがメインとして起動されたか?」ということを判定しています。これは,メインでもライブラリでもよいプログラムの常套手段です。メインでないのは,ライブラリとして輸入されたときです。ライブラリとして輸入した輸入元は,csv2html()を呼び出すわけです。