テクめも

プログラミング関連のちょっとしたTipsなどを書いています。

Pythonでエスケープされた文字列を戻す

argparser の引数として文字列を入力すると自動的にエスケープされますが、改行などプログラム中で使いたい場合があるかと思います。そこで、エスケープされた文字列を元に戻す方法を紹介します。

はじめに、自動的にエスケープされることを確認します。

# main.py
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--text')
args = parser.parse_args()

text = args.text

print(text)
print(repr(text))

このようなコードを実行すると、

python main.py --text 'Hello\nWorld'

以下のような出力が得られます。

Hello\nWorld
'Hello\\nWorld'

改行コードがエスケープされていることが分かります。

エスケープされた文字列を戻すには、以下のようにエンコードとデコードを行います。

text = args.text.encode().decode('unicode-escape')

print(text)
print(repr(text))

正しく改行コードが反映されていることが分かります。

Hello
World
'Hello\nWorld'

なお、codecsを使っても同じことが可能です。

text = codecs.decode(args.text, 'unicode-escape')

参考

PythonでUnicodeエスケープされた文字列・バイト列を変換 | note.nkmk.me