データ整理
WEB
ページ作成
ゲーム
|
Pythonプログラム: WEB 用私が WEB サイトメンテナンス用に作成したプログラムを示します.Python のプログラム作成の参考になるでしょう. 目次はじめにPython にはたくさんのモジュールが用意されており,短いソースコードで高度なことができます.便利な言語ですが使わなくては意味がありません.ここでは,私が作成し,実際に使った Python のソースコードを示します.私自身はプログラムのプロ (職業的な意味での) ではありませんので,汚いソースコードもあります.それでも,何かの参考になればとの思いから,公開します.それから,このページは,私自身の備忘録としての役割もあります. プログラム例講義ノートの上部に Google adsense を追加001 #!/usr/bin/python3 002 003 import os 004 import os.path 005 import sys 006 import codecs 007 import re 008 import shutil 009 010 # x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07 011 # x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07 012 # class FILES 013 # arguments: directory 014 # 015 # x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07 016 # x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07 017 class FILES: 018 def __init__(self, root): 019 self.file_path = [] 020 self.root_dir = root 021 self.extention = [".html", ".HTML", ".htm", ".PHP", ".php"] 022 self.LaTeX2HTML = r'<META NAME="Generator" CONTENT="jLaTeX2HTML' 023 024 025 # ======================================================================== 026 # find files 027 # ======================================================================== 028 def find_all_files(self): 029 030 pttrn_LaTeX2HTML = re.compile(self.LaTeX2HTML) 031 032 def ext_check(file_path): 033 name, ext = os.path.splitext(file) 034 if ext in self.extention: 035 return True 036 else: 037 return False 038 039 def contents_check(file_path): 040 read_max_lines = 100 041 nl = 0 042 fin = codecs.open(file_path, 'r', 'euc_jp') 043 line = fin.readline() 044 while line: 045 if pttrn_LaTeX2HTML.search(line) !=None: 046 fin.close 047 return True 048 line = fin.readline() 049 if nl > read_max_lines: 050 braek 051 fin.close 052 return False 053 054 for dirpath, dirname, filename in os.walk(self.root_dir): 055 for file in filename: 056 dir_file = os.path.join(dirpath, file) 057 if ext_check(dir_file) and contents_check(dir_file): 058 self.file_path.append(os.path.join(dirpath, file)) 059 060 # ======================================================================== 061 # print files 062 # ======================================================================== 063 def print_files(self): 064 for file in self.file_path: 065 print(file) 066 067 # ======================================================================== 068 # get files 069 # ======================================================================== 070 def get_files(self): 071 return self.file_path 072 073 074 075 076 # x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07 077 # x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07 078 # class REPLACE_TXT 079 # arguments: directory 080 # 081 # x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07 082 # x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07 083 class REPLACE_TXT: 084 def __init__(self, files): 085 self.file_result = 'result.txt' 086 self.ch_files = files 087 088 089 090 # ======================================================================== 091 # replace_txt 092 # ======================================================================== 093 def replace_top(self): 094 095 pttrn_doct = re.compile(r'<!DOCTYPE\s+HTML', re.IGNORECASE) 096 pttrn_sty = re.compile(r'<LINK\s+RE\s*L=\s*"STYLESHEET"\s+HREF\s*=', re.IGNORECASE) 097 pttrn_body = re.compile(r'<body', re.IGNORECASE) 098 pttrn_navi = re.compile(r'<DIV\s+CLASS\s*=\s*"navigation">', re.IGNORECASE) 099 pttrn_prev = re.compile(r'ALT\s*=\s*"previous"', re.IGNORECASE) 100 pttrn_up = re.compile(r'ALT\s*=\s*"up"', re.IGNORECASE) 101 pttrn_next = re.compile(r'ALT\s*=\s*"next"', re.IGNORECASE) 102 pttrn_BR = re.compile(r'<BR>\s*<HR>\s*<P>', re.IGNORECASE) 103 pttrn_div = re.compile(r'</DIV>', re.IGNORECASE) 104 pttrn_last = re.compile(r'</HTML>', re.IGNORECASE) 105 pttrn_path = re.compile(r'(../)+') 106 107 tmp_file = 'tmp.html' 108 fres = codecs.open(self.file_result, 'w') 109 110 for ch_file in self.ch_files: # ----- ファイル毎の処理 ----- 111 if os.path.isfile(tmp_file): 112 os.remove(tmp_file) 113 fin = codecs.open(ch_file, 'r', 'euc_jp') # 読み込み html ファイル 114 fout = codecs.open('tmp.html', 'w', 'euc_jp') # 書き込み一次ファイル 115 print("file name:", ch_file, end="\t") 116 117 is_doct = False 118 is_sty = False 119 is_body = False 120 is_navi = False 121 is_prev = False 122 is_up = False 123 is_next = False 124 is_BR = False 125 is_div = False 126 is_last = False 127 128 for line in fin: # ----- <!DOCTYPE HTML ---- 129 if pttrn_doct.search(line) !=None: 130 is_doct = True 131 fout.write(line) 132 fout.write('<!-- 2017.06.04: 先頭に,google adsense の広告追加. -->') 133 break 134 fout.write(line) 135 136 for line in fin: # ----- ルートの相対パス ---- 137 if pttrn_sty.search(line) != None: 138 fout.write(line) 139 if pttrn_path.search(line) != None: 140 is_sty = True 141 root_path = pttrn_path.search(line).group() 142 break 143 fout.write(line) 144 145 for line in fin: # ----- <body> を探し,直後に PHP ---- 146 if pttrn_body.search(line) != None: 147 is_body = True 148 remain = line.replace('<body>', '') 149 fout.write('<body>\n\n') 150 fout.write('<?PHP\n') 151 fout.write('mb_http_output("EUC_JP");\n') 152 fout.write('mb_internal_encoding("EUC_JP");\n') 153 fout.write('ob_start("mb_output_handler");\n') 154 fout.write('include "' + root_path + 'www_func/mk_html.php";\n') 155 fout.write('ob_end_flush();\n') 156 fout.write('?>\n\n') 157 fout.write(remain + '\n') 158 break 159 fout.write(line) 160 161 for line in fin: # ----- <DIV CLASS="navigation"> frexbox の開始 ---- 162 if pttrn_navi.search(line) != None: 163 is_navi = True 164 fout.write(line) 165 fout.write('<ul class="frex_lrrrr">\n') 166 fout.write('<li><div>') 167 break 168 fout.write(line) 169 170 for line in fin: # ---- ALT="previous" ---- 171 if pttrn_prev.search(line) != None: 172 is_prev = True 173 fout.write(line) 174 break 175 fout.write(line) 176 177 for line in fin: # ----- ALT="up" ---- 178 if pttrn_up.search(line) != None: 179 is_up = True 180 fout.write(line) 181 break 182 fout.write(line) 183 184 for line in fin: # ----- ALT="next" ---- 185 if pttrn_next.search(line) != None: 186 is_next = True 187 line = line.rstrip("\n") 188 fout.write(line+'</div></li>\n') 189 fout.write('<li><div>\n') 190 fout.write('<?php mk_lecture_top($is_google_adsense=TRUE); ?>\n') 191 fout.write('</div></li>\n') 192 fout.write('</ul>\n\n') 193 break 194 fout.write(line) 195 196 for line in fin: # ----- <BR> <HR> <P> 削除 ---- 197 if pttrn_BR.search(line) != None: 198 is_BR = True 199 break 200 fout.write(line) 201 202 for line in fin: # ----- </DIV> 直後に <HR> --- 203 if pttrn_div.search(line) != None: 204 is_div = True 205 fout.write(line) 206 fout.write('<HR>\n\n') 207 break 208 fout.write(line) 209 210 for line in fin: # ----- </HTML> をチェック --- 211 if pttrn_last.search(line) != None: 212 is_last = True 213 fout.write(line) 214 break 215 fout.write(line) 216 217 for line in fin: # ---- 残りの行の書き出し ---- 218 fout.write(line) 219 220 fout.flush() # ---- バッファーのデータをファイルに 221 222 223 if is_doct and is_sty and is_body and is_navi and is_prev and is_up and is_next and is_BR and is_div and is_last: 224 fres.write('1' + '\t' + ch_file + '\n') 225 print('1') 226 os.remove(ch_file) 227 shutil.copy2(tmp_file, ch_file) 228 os.chmod(ch_file, 0o644) 229 else: 230 fres.write('0' + '\t' + ch_file + '\t') 231 fres.write(str(is_doct+0)) 232 fres.write(str(is_sty+0)) 233 fres.write(str(is_body+0)) 234 fres.write(str(is_navi+0)) 235 fres.write(str(is_prev+0)) 236 fres.write(str(is_up+0)) 237 fres.write(str(is_next+0)) 238 fres.write(str(is_BR+0)) 239 fres.write(str(is_div+0)) 240 fres.write(str(is_last+0)) 241 fres.write('\n') 242 243 print(str(is_doct+0), end="") 244 print(str(is_sty+0), end="") 245 print(str(is_body+0), end="") 246 print(str(is_navi+0), end="") 247 print(str(is_prev+0), end="") 248 print(str(is_up+0), end="") 249 print(str(is_next+0), end="") 250 print(str(is_BR+0), end="") 251 print(str(is_div+0), end="") 252 print(str(is_last+0), end="\n") 253 254 fout.close() 255 fin.close() 256 257 fres.close() 258 259 260 261 262 # x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07 263 # x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07 264 # main routine 265 # 266 # 267 # x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07 268 # x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07x07 269 if __name__ == "__main__": 270 271 html_files = FILES('/home/yamamoto/tmp/lecture') 272 html_files.find_all_files() 273 html_files.print_files() 274 files = html_files.get_files() 275 276 replace = REPLACE_TXT(files) 277 replace.replace_top() ページ作成情報参考資料更新履歴
|