この連載は、『PythonでMarkdownからEPUBをつくろう』を一部抜粋して編集したものです。
本編には、全てのソースコードや、生成する原稿のサンプルが付属しています。ぜひ、こちらもご購入ください。
姉妹版の『PythonとPygameで作る レトロ風RPG 全コード』もあります。
≫ 目次に戻る まず、少し寄り道をします。以降のプログラムを少し短く書くための準備をします。mod/util/file.pyを作成してプログラムを書きます。
gen-epub/main.pymod/util/file.py …… 新しく作るファイル 1import os, yaml
2from send2trash import send2trash
3
4# パスを結合して絶対パスに
5def join(*args):
6 return os.path.abspath(os.path.join(*args))
7
8# テキスト ファイルの読み込み
9def read(p):
10 with open(p, 'r', encoding='UTF-8') as f:
11 t = f.read()
12 return t
13
14# テキスト ファイルの書き込み
15def write(p, t):
16 with open(p, 'w', encoding='UTF-8') as f:
17 f.write(t)
18
19# yamlファイルの読み込み
20def read_yaml(p):
21 with open(p, 'r', encoding='UTF-8') as f:
22 y = yaml.load(f, yaml.CLoader)
23 return y
24
25# 存在するならゴミ箱に送る
26def exist2trash(p):
27 if os.path.exists(p):
28 send2trash(p)
ここでは5つの関数を作ります。with open(~) as f:と書いた部分は、Pythonのファイル操作の定型部分です。Pythonに詳しくない人は「ファイルの読み書きはこのような形でおこなう」という理解でよいです。
複数の引数のパスを結合して、絶対パスにして返します。
join('C:/my_pg/epub', 'doc/', '1.md')のように引数を書くと、C:/my_pg/epub/doc/1.mdのようなパスを作ります。
join('C:/my_pg/epub', '../doc/', '2.md')のように引数を書くと、C:/my_pg/doc/2.mdのようなパスを作ります。
Python標準ライブラリーosの、os.path.join()関数(パスを結合)と、os.path.abspath()関数(絶対パス化)を利用します。
引数pのテキスト ファイルを読み込み、テキストを返します。
read('C:/my_pg/1.md')のように引数を書くと、C:/my_pg/1.mdのファイルを読み込んで、中身のテキストを返します。
引数pに、テキストtを書き込みます。
write('C:/my_pg/1.md', 'abc')のように引数を書くと、C:/my_pg/1.mdのファイルに、abcと書き込みます。書き込みは上書きでおこないます。ファイルがない場合は新規に作成します。
pip install PyYAMLでインストールしたパッケージを、import yamlで読み込み利用します。
引数pのYAMLファイルを読み込み、設定を解析した辞書を返します。
pip install Send2Trashでインストールしたパッケージ内のsend2trashを読み込み利用します。from send2trash import send2trashのように書きます。
引数pのファイルやディレクトリが存在するならゴミ箱に送ります。
send2trash()関数は、存在しないファイルやディレクトリーを引数にするとエラーになります。そのためos.path.exists()関数で存在を確認して、存在するときのみ実行します。
この連載は、『PythonでMarkdownからEPUBをつくろう』を一部抜粋して編集したものです。
本編には、全てのソースコードや、生成する原稿のサンプルが付属しています。ぜひ、こちらもご購入ください。
姉妹版の『PythonとPygameで作る レトロ風RPG 全コード』もあります。