web-dev-qa-db-ja.com

string.translate関数の「テーブル」とはどういう意味ですか?

string.translate 関数を通過する:

Deletechars(存在する場合)にあるsからすべての文字を削除してから、テーブルを使用して文字を翻訳します。テーブルがNoneの場合、文字削除ステップのみが実行されます。

  • ここでtableはどういう意味ですか?マッピングを含むdictにできますか?
  • "must be 256-string string"はどういう意味ですか?
  • tableを手動または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

ここに何が欠けていますか?

22

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'
22
falsetru

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()は上記の動作と一致します)。

10
Martijn Pieters

辞書{ordinal:char}ではなく、辞書{char:char}を使用してテキストを翻訳するには(例:{'a': 'X'、 'J': 'y'、...}:

text.translate({ord(k):dictionary[k] for k in dictionary})