夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

Blenderスクリプトで任意のパスにあるテキストの内容を書き換える

本日はBlender(Python)枠です。

以前BlenderPyrhonで外部ファイルを読み込むことを行いました。

redhologerbera.hatenablog.com

今回は任意の外部パスにあるテキストファイルの内容をBlenderで書き換えていきます。

〇BlenderPythonで外部テキストファイルの書き換え

今回はDesktopにテキストファイルを作成しました。

Blenderで例えばスクリプトを実行した際のタイムスタンプなどを上書きできるようにしてきます。

import bpy
import os

# ファイルパスを指定します(ここではデスクトップ上の'test.txt')
file_path = os.path.join(os.path.expanduser("~"), 'Desktop', 'test.txt')

# ファイルを読み込みます
with open(file_path, 'r') as f:
    content = f.read()
print("読み込んだテキスト: ", content)

# テキストを書き込みます(ここでは同じファイルに上書きします)
new_content = "Hellow"
with open(file_path, 'w') as f:
    f.write(new_content)
print("書き込んだテキスト: ", new_content)

スクリプトを実行するとコンソールウィンドウに読み込んだテキスト、書き込んだテキスト両方が表示されます。

〇任意の項目だけ書き込む

上記の例ではテキストファイルを読み込み、ファイル内全体を書き換えていましたが実際の運用ではフォーマットに沿って一部を書き換えるというような使い方が多いと思います。

今回は<>内の文字のみを書き換えるという条件で行っていきます。

コードは次のようになります。

import bpy
import os
import re

# ファイルパスを指定します(ここではデスクトップ上の'test.txt'とします)
file_path = os.path.join(os.path.expanduser("~"), 'Desktop', 'test.txt')

# ファイルを読み込みます
with open(file_path, 'r') as f:
    content = f.read()
print("読み込んだテキスト: ", content)

# <>で囲まれた部分を見つけます
pattern = r'<(.*?)>'
matches = re.findall(pattern, content)

# 見つけた部分を書き換えます
new_content = content
for match in matches:
    new_content = new_content.replace('<' + match + '>', '<Hellow>')

# 新しいテキストをファイルに書き込みます
with open(file_path, 'w') as f:
    f.write(new_content)
print("書き込んだテキスト: ", new_content)

これによって<>内のみが書き換えられるようになります。

import reはPythonのデフォルトライブラリで、Python正規表現を行う際に使用されています。

具体的には文字列を特定のパターンで処理することができ、今回の場合はre,findall()を使用して特定の文字列のみを処理するようにしています。

以上でBlenderスクリプトで任意のパスにあるテキストファイルの内容を書き換えることができました。これはログの出力などで使用できます。