0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PythonプログラムでPythonプログラムを生成する

Last updated at Posted at 2024-08-17

pythonプログラム自身によるpythonプログラムの生成

プログラムでやる以上ミスは付き物だと思いますが、コーディングの半自動化、設定ファイルの記載変更など定型的に書き換えるプログラム(あるいはそれに準ずるもの)などを一括変更する用途でイメージしました。

with open~で*.pyとして書き込む

プログラムといってももとはテキストデータですから、以下のようにpythonプログラムからpythonプログラムを作成することができます。
ここではexample01.pyによって、new_example01.pyを生成しています。

example01.py
data = """
print("hello")
"""

with open("./new_example01.py",mode="w") as f:
    f.write(data)
new_example01.py

print("hello")

自分自身のコードを読み込む

「__file__」によって自分自身のコードを読み込みます。
※環境によって、違うファイルパスの取り方が必要になるかもです。
以下は、example02.pyをnew_example02.pyとして、コピーした例です。

example02.py
# 自分自身のファイルパスを取得
myself_path = __file__

# 自分のスクリプトを読み込み
with open(myself_path, "r", encoding="utf-8") as f:
    code = f.read()

# 書き込み
new_file_path = "new_example02.py"

with open(new_file_path, "w", encoding="utf-8") as f:
    f.write(code)

print(f"コードが {myself_path} に保存されました。")
new_example02.py
# 内容は同じなので省略する

コードの一部を書き換える

いろいろな方法が考えられますが、ここではcodeの中に代入されたテキストデータを正規表現を使って書き換えます。コメント文を目印にして、正規表現で書き換えています。

import re

# 変更元コード
def hogehoge():
    # StartPoint01
    print("ugougo")
    # Endpont01

# 自分自身のファイルパスを取得
myself_path = __file__

# 自分のスクリプトを読み込み
with open(myself_path, "r", encoding="utf-8") as f:
    code = f.read()
    
# 置換するコード
replace_code = """
    print("hugahuga")
"""

# StartPoint01からEndpont01までの内容をreplace_codeに置換する
code = re.sub(r"# StartPoint01(.*?)# Endpont01",
              f"# StartPoint01{replace_code}    # Endpont01",
              code,
              flags=re.DOTALL,count=1)

# 書き込み
new_file_path = "new_example03.py"

with open(new_file_path, "w", encoding="utf-8") as f:
    f.write(code)

print(f"コードが {myself_path} に保存されました。")

結果

new_example03.py
import re

def hogehoge():
    # StartPoint01
    print("hugahuga") # 正規表現による変更点
    # Endpont01

# 以下略

まとめ

GUIから設定ファイルを変更できるプログラムを作ろうと思って考えました。
何かの足しになれば幸いです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?