Bus errorとSegmentation faultに困ったら見るブログ

物理の研究者による日々の研究生活のメモ書きです ( python/emacs/html/Japascript/シェルスクリプト/TeX/Mac/C言語/Linux/git/tmux/R/ポケモンGO)

【python3】pythonの中からシェルコマンドでsedで置換したいとき

pythonで、あるファイルの中身を書き換えることをあれこれやっていた

ググるとwith openとかで一度ファイルを開いて
ファイルの中身を書き換えて、もう一度書き出すみたいなことをしている記事がとても多い

それを真似してやってみると、なぜか修正後のファイルと元のファイルも同時に修正される
(pythonのコピーが悪さしてる?)

かなり時間をかけたけど、原因がわからなかったので別の方法で・・・

ここは古のsedをsubprocessから呼び出して使う

参考にしたページ

Pythonでテキストファイルの内容を置換する6つの方法

import subprocess
 
subprocess.run('sed -i -e s/div>/p>/g sample_fixed.html', shell=True)

自分はこの最後のshell=Trueをつけていなくて、30分ほど詰まってしまった・・・(恥ずかしい)

その時のエラーメッセージは

   OSError: [Errno 2] No such file or directory

みたいな感じだったと思う(メモってないけど)

stackoverflow.com

sedについて

今回はファイルのパスを置換する必要があったので / が分割文字だと見通しが悪い
これは別の記号で置き換えてもいいっぽい(tex のverbみたいなものか)

以下のような感じでもいけると思う(未確認です)

import subprocess
 
subprocess.run('sed -i -e s@div>@p>@g sample_fixed.html', shell=True)

sedについて参考

sedによる文字列の置換方法

ランキングに参加中、クリックにご協力お願いします!