2011-08-13 9 views
1

カスタムプレースホルダを使用した文字列書式設定のためのPythonライブラリを探しています。つまり、%fのような文字列を%dのディレクトリ名に置き換えて、の3桁の数字で置き換えると、"%f %d %3c"のような文字列を定義することができます。か何か。それはprintfのようなものである必要はありませんが、そうであれば素晴らしいでしょう。だから私は各文字が何を意味するのか、文字列か数字か、何らかのフォーマット(数字のような)のデータを定義できるようにしたい。カスタムプレースホルダを使用した文字列書式設定のためのPythonライブラリ

ユーザーはフォーマットを指定でき、それをデータで埋め込むことができます。 datefmtのように動作します。しかし、カスタムのもののために。

すでにPython(2.5 +、悲しいことに2.7と3、その__format__)には何かがありますか?

答えて

2

string.Templateありますが、それは正確にあなたが望むものを提供していません。

>>> from string import Template 
>>> t = Template("$filename $directory $counter") 
>>> t.substitute(filename="file.py", directory="/home", counter=42) 
'file.py /home 42' 
>>> t.substitute(filename="file2.conf", directory="/etc", counter=8) 
'file2.conf /etc 8' 

ドキュメント:http://docs.python.org/library/string.html#template-strings

しかし、私は、これはあなたが必要なものを提供してだと思います。テンプレート文字列を指定して使用してください:

>>> template = "%(filename)s %(directory)s %(counter)03d" 
>>> template % {"filename": "file", "directory": "dir", "counter": 42} 
'file dir 042' 
>>> template % {"filename": "file2", "directory": "dir2", "counter": 5} 
'file2 dir2 005' 
+0

ああ、私はこれを忘れていました。しかし、ユーザーが書式設定文字列を指定できるようにするのは安全ですか?それとも、これが悪用につながる可能性がありますか? – Mitar

+1

'locals()'を書式設定引数として指定しない限り、彼はあなたが提供する辞書にしかアクセスできません。 –

+0

私は完全な書式設定機能を公開することに注意しています。 "%030000000000000d"%(3)のようなものについて考えると、あらかじめ膨大なメモリブロックを割り当てる必要があります。おそらく他の脆弱性の可能性のあるものがたくさんあります... –

関連する問題