編集履歴一覧に戻る
eucalyのアイコン画像

eucaly が 2024年01月28日17時04分01秒 に編集

初版

タイトルの変更

+

電気工事士学科試験過去問集の作成

タグの変更

+

Python

+

pdf

+

電気工事士

メイン画像の変更

メイン画像が設定されました

記事種類の変更

+

セットアップや使用方法

ライセンスの変更

+

(MIT) The MIT License

本文の変更

+

こんにちは、ゆうかりです。 このたび、無事?に、電気工事士2種の試験に受かりました。 つきましては、オイラが学科試験勉強のために使った、過去問集PDFを作成する適当スクリプトを共有します。 # 電気工事士学科試験の問題構造 学科試験の過去問は、電気技術者試験センターが公表しております。 https://www.shiken.or.jp/answer/index_list.php?exam_type=50 まあこれ、問題と解答のPDFが別なので、オイラはTACさんの過去問PDFを使いました。 https://www.tac-school.co.jp/kouza_denkikoujisi/denkikoujisi_kakomon.html TACさんの過去問PDFは、問題の最後のページに解凍がくっついている構造です。 で、問題ですが。 表紙や注意事項、一般問題、配線図、及び解答の順番になっています。 TACさんのページに公開されている、平成21年度から令和5年度まで、ページ数も含め、問題構造は変わりません。 # 過去問集PDFの作りざま 一般問題、配線図、解答をそれぞれまとめたPDFを作り、PDF各ページの左上に、元のファイル名を記載する方向で。 ページの例はこんな感じ。 ![キャプションを入力できます](https://camo.elchika.com/55a50be711e54dc2b2ee88e3896df1cc2ad45d62/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38666637633237372d646465642d343333632d393736342d6162303436346433326631302f36383966653962642d386162372d343832612d393936332d353964363137346461623361/) 一般問題、174ページあります、やりほうだい!。 # つかいかた まあそれぞれ印刷して、解いてみて答え合わせする感じで。 オイラは、一般問題を2Nアップ(2ページを1ページにまとめる)、配線図はそのまま、解答はPC画面表示で勉強していきました。 だいたい1~2周すれば、まあなんとなくコツ的なものはつかめるかと思います。 # スクリプト ・ベースとなる問題解答PDFは、スクリプトと同じフォルダに突っ込む ・あらかじめサブフォルダ「kiridashi」を作っておく ・以下の3つのスクリプトを実行すると、kiridashiフォルダ内にPDFが3つできる ・それぞれのスクリプトの違いは、PDFファイルのページコピーの位置が違うだけ ・PyMuPDFライブラリを使ってます  pip install PyMuPDF  でセットアップできまーす ```python:kiridashi1.py import glob import os import fitz import sys basefiles = glob.glob('./*.pdf') doc3 = fitz.open() for basefile in basefiles: filenamerow = os.path.splitext(os.path.basename(basefile))[0] print (basefile) doc1 = fitz.open(basefile) doc2 = fitz.open() doc2.insert_pdf(doc1, from_page=4, to_page=9) for num in range(0,6): page = doc2.load_page(num) rc = page.insert_text( (40,40), # bottom-left of 1st char filenamerow, # the text (honors '\n') fontname="helv", # the default font rotate=0, # also available: 90, 180, 270 ) doc3.insert_pdf(doc2) targetfilename = 'kiridashi/zenbu.pdf' doc3.save(targetfilename) sys.exit() ``` ```python:kiridashi2.py import glob import os import fitz import sys basefiles = glob.glob('./*.pdf') doc3 = fitz.open() for basefile in basefiles: filenamerow = os.path.splitext(os.path.basename(basefile))[0] print (basefile) doc1 = fitz.open(basefile) doc2 = fitz.open() doc2.insert_pdf(doc1, from_page=10, to_page=12) doc2.insert_pdf(doc1, from_page=14, to_page=14) for num in range(0,4): page = doc2.load_page(num) rc = page.insert_text( (40,40), # bottom-left of 1st char filenamerow, # the text (honors '\n') fontname="helv", # the default font rotate=0, # also available: 90, 180, 270 ) doc3.insert_pdf(doc2) targetfilename = 'kiridashi/zenbu2.pdf' doc3.save(targetfilename) sys.exit() ``` ```python:kiridashi3.py import glob import os import fitz import sys basefiles = glob.glob('./*.pdf') doc3 = fitz.open() for basefile in basefiles: filenamerow = os.path.splitext(os.path.basename(basefile))[0] print (basefile) doc1 = fitz.open(basefile) doc2 = fitz.open() lastpage = doc1.page_count - 1 doc2.insert_pdf(doc1, from_page=lastpage, to_page=lastpage) for num in range(0,1): page = doc2.load_page(num) rc = page.insert_text( (40,40), # bottom-left of 1st char filenamerow, # the text (honors '\n') fontname="helv", # the default font rotate=0, # also available: 90, 180, 270 ) doc3.insert_pdf(doc2) targetfilename = 'kiridashi/zenbu_kotae.pdf' doc3.save(targetfilename) sys.exit() ``` # がんばって! IoT的なアレには親和性の高い電気工事士です、が。 オイラは技能試験1回落ちてます・・・。 いやあ、手が遅くて、間に合いませんでした、、、。 電気の基礎の振り返りや学習にも至適なので、ご興味があれば是非!。