string.translate
関数を通過する:
Deletechars(存在する場合)にあるsからすべての文字を削除してから、テーブルを使用して文字を翻訳します。テーブルがNoneの場合、文字削除ステップのみが実行されます。
dict
にできますか?string.maketrans
の代わりにカスタム関数で作成できますか?機能を確認するために関数を使用してみました(以下の試み)が、正常に使用できませんでした。
>>> "abcabc".translate("abcabc",{ord("a"): "d", ord("c"): "x"})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: translation table must be 256 characters long
>>> "abcabc".translate({ord("a"): ord("d"), ord("c"): ord("x")}, "b")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: expected a character buffer object
>>> "abc".translate({"a": "d", "c": "x"}, ["b"])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: expected a character buffer object
ここに何が欠けていますか?
Python使用しているバージョンに依存します。
In Python 2.x.テーブルは256文字の文字列です。 string.maketrans
:
>>> import string
>>> tbl = string.maketrans('ac', 'dx')
>>> "abcabc".translate(tbl)
'dbxdbx'
Python 3.xでは、テーブルはUnicode序数のUnicode文字へのマッピングです。
>>> "abcabc".translate({ord('a'): 'd', ord('c'): 'x'})
'dbxdbx'
table
は256文字の文字列でなければなりません。 str.translate()
メソッドはこのテーブルを使用して、バイト値(0〜255の数値)を新しい文字にマッピングします。例えば文字'a'
(整数値97のバイト)は、テーブルの98番目の文字に置き換えられます。
あなたは本当に、str.translate()
関数ではなく、これらすべてについて string.translate()
documentation を参照したいのです。後者のドキュメントは完全ではありません。
string.maketrans
function;を使用してビルドできます。置き換えたい文字をjustに置き換えます。あなたの例では、それは:
>>> import string
>>> table = string.maketrans('ac', 'cx')
>>> len(table)
256
>>> table[97]
'c'
>>> 'abcabc'.translate(table, 'b')
'cxcx'
2番目の引数も文字列であると想定されています。
unicode.translate()
メソッドのドキュメントを読んだようです。動作が変更され、実際にunicode.translate()
の辞書を渡す必要があります。 Python 2 unicode
型はPython 3のstr
型であるため、これもstr.translate()
の使用方法です。 in Python 3(bytes.translate()
は上記の動作と一致します)。
辞書{ordinal:char}ではなく、辞書{char:char}を使用してテキストを翻訳するには(例:{'a': 'X'、 'J': 'y'、...}:
text.translate({ord(k):dictionary[k] for k in dictionary})