この連載は、『PythonでMarkdownからEPUBをつくろう』を一部抜粋して編集したものです。
本編には、全てのソースコードや、生成する原稿のサンプルが付属しています。ぜひ、こちらもご購入ください。
姉妹版の『PythonとPygameで作る レトロ風RPG 全コード』もあります。
≫ 目次に戻る まず、少し寄り道をします。以降のプログラムを少し短く書くための準備をします。mod/util/file.py
を作成してプログラムを書きます。
gen-epub/
main.py
mod/
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 全コード』もあります。