PythonでMarkdownからEPUBをつくろう

この連載について

 この連載は、『PythonでMarkdownからEPUBをつくろう』を一部抜粋して編集したものです。

 本編には、全てのソースコードや、生成する原稿のサンプルが付属しています。ぜひ、こちらもご購入ください。

 姉妹版の『PythonとPygameで作る レトロ風RPG 全コード』もあります。

目次に戻る

6-1 ファイル操作の道具

公開:2025-05-26

 まず、少し寄り道をします。以降のプログラムを少し短く書くための準備をします。mod/util/file.pyを作成してプログラムを書きます。

▶ ファイル構成
▶ main.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(*args)

 複数の引数のパスを結合して、絶対パスにして返します。

 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()関数(絶対パス化)を利用します。

read(p)

 引数pのテキスト ファイルを読み込み、テキストを返します。

 read('C:/my_pg/1.md')のように引数を書くと、C:/my_pg/1.mdのファイルを読み込んで、中身のテキストを返します。

write(p, t)

 引数pに、テキストtを書き込みます。

 write('C:/my_pg/1.md', 'abc')のように引数を書くと、C:/my_pg/1.mdのファイルに、abcと書き込みます。書き込みは上書きでおこないます。ファイルがない場合は新規に作成します。

read_yaml(p)

 pip install PyYAMLでインストールしたパッケージを、import yamlで読み込み利用します。

 引数pのYAMLファイルを読み込み、設定を解析した辞書を返します。

exist2trash(p)

 pip install Send2Trashでインストールしたパッケージ内のsend2trashを読み込み利用します。from send2trash import send2trashのように書きます。

 引数pのファイルやディレクトリが存在するならゴミ箱に送ります。

 send2trash()関数は、存在しないファイルやディレクトリーを引数にするとエラーになります。そのためos.path.exists()関数で存在を確認して、存在するときのみ実行します。


目次に戻る

この連載について

 この連載は、『PythonでMarkdownからEPUBをつくろう』を一部抜粋して編集したものです。

 本編には、全てのソースコードや、生成する原稿のサンプルが付属しています。ぜひ、こちらもご購入ください。

 姉妹版の『PythonとPygameで作る レトロ風RPG 全コード』もあります。

 技術系同人誌など まとめページ


トップページに戻る
Cronus Crown(クロノス・クラウン)のトップページに戻る
(c)2002-2025 Cronus Crown (c)1997-2025 Masakazu Yanai
ご意見・お問い合わせはサイト情報 弊社への連絡までお願いします
個人情報の取り扱い、利用者情報の外部送信について