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')