質問は完全な自己完結型の例ではありません。Python 2か3か、どこmaketrans
から来たのかわからない。間違っていると思う可能性が高いので、質問に適切なタグを付けて、短く、自己完結型の正しい例を提供する必要があります。 。(それと、他のさまざまな人々(おそらく私より賢い人もいる)があなたの質問を曖昧だったので無視した可能性が高いという事実。)
2.xを使用していて、from string import *
を取得maketrans
し、json["name"]
str / bytesではなくUnicodeであると仮定すると、次の問題が発生します。
変換テーブルには、古いスタイルの8ビットテーブル(256文字の配列)と新しいスタイルのスパーステーブル(ある文字の序数を別の文字にマッピングするdict)の2種類があります。str.translate
関数はどちらも使用できますが、2番目のみを使用できます(unicode.translate
少し考えれば明らかな理由から)。
このstring.maketrans
関数は、古いスタイルの8ビット変換テーブルを作成します。したがって、で使用することはできませんunicode.translate
。
次のように、ドロップイン置換として独自の「makeunitrans」関数をいつでも作成できます。
def makeunitrans(frm, to):
return {ord(f):ord(t) for (f,t) in zip(frm, to)}
ただし、特定のキャラクターをマップしたいだけの場合は、もう少し特別な目的を実行できます。
def makeunitrans(frm):
return {ord(f):ord(' ') for f in frm}
しかし、あなたの最後のコメントから、私はtranslate
あなたが何を望んでいるかさえわかりません:
文字列を「türlichtürlichsicherdicker」にフォーマットしたい
これが正しければ、文字列を「türlichtürlichsicher dicker」にフォーマットします。これは、これらすべての句読文字をスペースにマッピングしているためです。
新しいスタイルの変換テーブルを使用すると、必要なものをNoneにマップでき、その問題が解決されます。translate
ただし、たとえば、複数回呼び出すのではなく、最初にメソッドを使用している理由を確認することをお勧めしますreplace
(通常、「パフォーマンスのために」と言われますが、翻訳テーブルをインラインで作成することはありません。それが問題だった場合は毎回)または些細な正規表現を使用します。