「6時間かけて作った動画は約3分」みたいなやつすぎて拍子抜けした……。
Pythonの勉強もかねて自サイトの更新処理をPythonで書いてるという話の続き。
特にPythonの解説とかそういうやつではないです。日記です。
今までBashでテンプレ合成するスクリプトを作って生成していた個別ページHTMLについて、
次デザインでちょっとだけテンプレが変わったのでBashで流すのがちょっと面倒で、
勉強もかねてPythonで一括変換したということなんだけど、
タイトルの通り3日かけて作ったPythonが2秒で処理終わってお役目終了になってしまって悲しいやら嬉しいやら。それだけです。
成功したので嬉しいことは嬉しいよ。
Bash自動化した回で↑この部分からキャプションの文字列だけを別ファイルで保存するスクリプトを作っていて、特に分けておいても役に立たないよな〜と思ったら今ここですっごい役に立っててすごい。
ファイル構成がこんなやつで↓
caption/ (拡張子外したテキストファイル)
└abs00
└abs01
└...計100個以上
page/ (テンプレに流した後のHTMLをここに保存する)
└template.html
.database (ID@タイトル@投稿日付@タグ というフォーマットで書かれたCSVもどき)
.databaseの中身がこんな感じで↓
frac054.jpg@Break Rusty Window@2018.12.01@#fracfrac055a.gif@Dogfight of Two Wizards (Animation)@2018.12.11@#frac #motionfrac055.jpg@Dogfight of two Wizards@2018.12.10@#fracfrac057.jpg@The moment thunder is born@2019.01.11@#frac
で、Pythonがこんなやつ↓(コメントが……)
#!/usr/bin/pythonimport datetimeimport osimport reimport sysimport shutilfrom jinja2 import Environment, FileSystemLoader, Templatefrom PIL import Image, ImageTkfrom ftplib import FTPHOME = os.environ["HOME"] +"/"DEST = os.environ["SITE"] +"/"env = Environment(loader=FileSystemLoader('./', encoding="utf8"))# Captionフォルダにあるキャプションデータを全部今のテンプレに流し込みたい!# Jinjaを使ってDatabaseからIDを引っ張ってCaptionフォルダから該当テキストを引っ張ってきて# 変数に入れてテンプレに流し込んでくれ# Captionデータの一覧filelist = os.listdir(DEST+ "caption")# frac002 などのIDがヒットするfor name in filelist:# makedatabaseで作ったデータを引っ張ってくる# 読み込みdb = open(DEST + ".database", "r")dblist = db.readlines()db.close()# Forでデータベース一行ずつ実行for matched in dblist:# FilelistのForで出しているディレクトリ内リストとマッチするかif matched.find(name) >= 0 :# frac002@sample@2021.00.00@#tag #tag2# AWKで切って変数に納する的なやつ 🥤splitdb = matched.split("@")db_id = str(splitdb[0])db_title = str(splitdb[1])db_date = str(splitdb[2])db_tag = re.sub("\n", "" ,str(splitdb[3]))# ヒットしたキャプションをファイルからロードcapfile = open(DEST + "caption/"+ name, "r")caption = capfile.read()capfile.close()# キャプションのBRタグとインデント自動挿入、まずbrから (コピペcaption_br = re.sub("$","<br>",caption,flags=re.MULTILINE)# インデントcaption_br = re.sub("^","\t\t",caption_br,flags=re.MULTILINE)# 流し込みのためのデータ作成data = {"id": db_id,"title": db_title,"date": db_date,"tag": db_tag,"caption": caption_br}# テンプレート読み込みf = open(DEST + "page/template.html", "r")tmptext = f.read();template = Template(tmptext)# テンプレート流し込みrendered = template.render(data)# 流し込んだものをファイル出力output = open(DEST+"page/"+ name +".html", "w")output.write(rendered)output.close()
PythonでGrepみたいにマッチ文字列に対してどうたら…というのは https://orebibou.com/ja/home/201612/20161215_001/ が参考になった。
よく分からんままとりあえず書いてたけど、結局はifで合致するかどうかをforで全項目に対して繰り返しているだけらしい。
0 件のコメント:
コメントを投稿