pythonでエクセル、テキストを読み込みhtmlに書きだしたい時があると思います。
その時の方法を、自分用に作成しました。
目次
pythonでエクセル、テキストを読み込みhtmlに書き出すスクリプト
import openpyxl as px
import os
###################読み込むエクセルファイルパス
wb = px.load_workbook(r'D:\DATA\pythonG_host_ip_syutoku\host_ip.xlsx')
###################読み込むテキストファイルパス
contents_file = r'D:\DATA\pythonG_host_ip_syutoku\contests.txt'
###################書き込むテキストファイルパス
contents_file_w = r'D:\DATA\pythonG_host_ip_syutoku\contests_w.txt'
#waku_file = r'D:\DATA\pythonG_host_ip_syutoku\waku.html'
###################読み込むヘッダーテキストファイルパス
waku_headfile = r'D:\DATA\pythonG_host_ip_syutoku\waku_head.txt'
###################読み込むフッターテキストファイルパス
waku_footfile = r'D:\DATA\pythonG_host_ip_syutoku\waku_foot.txt'
###################シートの初期値
page_number = 0
###################シートを読み込みリストへ変換する
sheets = wb.sheetnames
###################シートの総数を求め、繰り返し回数を決定する
sheets_suu = len(sheets)-1
###################現ページNOとシートの総数を比較する-シートの数だけ繰り返す
while page_number <= sheets_suu:
#現ページNOから現ページの名前を調べる
page = sheets[page_number]
#書き込むファイルの指定、シートにより分ける場合
waku_file_w = r'D:\DATA\pythonG_host_ip_syutoku\comp\waku_w-'+page+'.html'
#現ページの名前から現ページをアクティブにする
wb.active = wb.sheetnames.index(page)
ws = wb.active
############初期にセルを指定する2##番号で############
row = 4
column = 2
############コンテンツ作成関数############
def func1(host,row,column):
############初期のセルを読み込み############
#host = ws.cell(row,column).value
############セルが空白の時は関数を抜ける###########
if not host:
exit
else:
############セルの値がAP出なければくり返す###########
while False == host.startswith('AP'):
#host = ws.cell(row,column).value
ip = ws.cell(row,column+1).value
############ファイルに書き込み###########
with open(contents_file,'r') as contents:
filetext = contents.read()
############元ファイルの値を変換###########
after_text = filetext.replace('host_input',host).replace('ip_input',ip)
############コンテンツの中身を追記していく###########
with open(contents_file_w,'a') as contents_w:
contents_w.write(after_text)
############////ファイルに書き込み###########
row +=1
############APの最初が入ってしまうのでもう一回判定###########
host = ws.cell(row,column).value
if 'AP' in host:
break
host = ws.cell(row,column).value
############hostがあれば関数呼び出し###########
while host:
host = ws.cell(row,column).value
func1(host,row,column)
column +=3
with open(waku_headfile,'r') as waku_head_r:
headtext = waku_head_r.read()
with open(waku_footfile,'r') as waku_foot_r:
foottext = waku_foot_r.read()
with open(contents_file_w,'r') as contents_file_all:
contenstext = contents_file_all.read()
with open(waku_file_w,'w') as waku_w:
waku_w.write(headtext)
waku_w.write(contenstext)
waku_w.write(foottext)
############書き込み終わったのでコンテンツファイル削除###########
os.remove(contents_file_w)
############次のシートへ###########
page_number +=1
同じフォルダに入れるファイル
- waku.html (入れたい部分)
- waku_head.txt (入れたい部分から上の部分)
- waku_foot.txt (入れたい部分から下の部分)
変更する箇所
- ファイルのパス全般
- エクセルの初めに参照するセルの位置をrowとcolumnの数字に入力する
- エクセルの列の間の数字を入力する column +=3 の数字を編集する
- waku.htmlとpythonファイルの入れ込みたい部分
- row +=1を止めるトリガーの部分2か所(今回でいう「AP」が含まれていなければ、「AP」が含まれていればbreak)
見にくいのでコピーして何かテキストか何かに張り付けてみてね。。。
python使用時の注意点
またこれを作成している時にはまったというかpythonが動かなかったりもしたので、そのリンクも張っておきます。