24

jsonデータを3つのディクショナリ変数に返す3つのAPIがあります。辞書からいくつかの値を取得して処理しています。リストに必要な特定の値を読みましたvaluelist。手順の1つは、句読点を削除することです。私は通常string.translate(None, string.punctuation)このプロセスに使用しますが、辞書データがユニコードであるため、エラーが発生します。

    wordlist = [s.translate(None, string.punctuation)for s in valuelist]
TypeError: translate() takes exactly one argument (2 given)

これを回避する方法はありますか?Unicodeをエンコードするか、string.translate?の代わりに使用します。

4

5 に答える 5

32

translate メソッドは、バイト文字列オブジェクトとは異なり、Unicode オブジェクトで動作します。

>>> ヘルプ (unicode.translate)

S.translate(テーブル) -> ユニコード

すべての文字がマップされている文字列 S のコピーを返します
のマッピングである必要がある、指定された変換テーブルを介して
Unicode 序数から Unicode 序数、Unicode 文字列、または None。
マップされていない文字はそのまま残ります。None にマップされた文字
削除されます。

したがって、あなたの例は次のようになります。

remove_punctuation_map = dict((ord(char), None) for char in string.punctuation)
word_list = [s.translate(remove_punctuation_map) for s in value_list]

ただし、string.punctuationASCII 句読点のみが含まれていることに注意してください。完全な Unicode にはさらに多くの句読点がありますが、それはすべてユース ケースによって異なります。

于 2012-07-27T18:50:26.113 に答える
6

string.translate が非推奨になっていることに気付きました。実際に文字を翻訳するのではなく、句読点を削除しているため、 re.sub 関数を使用できます。

    >>> import re

    >>> s1="this.is a.string, with; (punctuation)."
    >>> s1
    'this.is a.string, with; (punctuation).'
    >>> re.sub("[\.\t\,\:;\(\)\.]", "", s1, 0, 0)
    'thisis astring with punctuation'
    >>>
于 2012-07-27T17:14:31.903 に答える
3

このバージョンでは、自分の手紙を他の人に相対的に作ることができます

def trans(to_translate):
    tabin = u'привет'
    tabout = u'тевирп'
    tabin = [ord(char) for char in tabin]
    translate_table = dict(zip(tabin, tabout))
    return to_translate.translate(translate_table)
于 2013-10-01T11:12:57.093 に答える
1

Pythonreモジュールでは、関数を置換引数として使用できます。これは、オブジェクトを取り、Match適切な置換を返す必要があります。この関数を使用して、カスタム文字の翻訳関数を構築できます。

import re

def mk_replacer(oldchars, newchars):
    """A function to build a replacement function"""
    mapping = dict(zip(oldchars, newchars))
    def replacer(match):
        """A replacement function to pass to re.sub()"""
        return mapping.get(match.group(0), "")
    return replacer

例。すべての小文字 ( [a-z]) に一致し、'h' と 'i' をそれぞれ 'H' と 'I' に変換し、他の一致を削除します。

>>> re.sub("[a-z]", mk_replacer("hi", "HI"), "hail")
'HI'

ご覧のとおり、短い (不完全な) 置換セットで使用される場合があり、一部の文字を削除するために使用される場合があります。

Unicode の例:

>>> re.sub("[\W]", mk_replacer(u'\u0435\u0438\u043f\u0440\u0442\u0432', u"EIPRTV"), u'\u043f\u0440\u0438\u0432\u0435\u0442')
u'PRIVET'
于 2015-01-27T17:35:57.960 に答える