web-dev-qa-db-ja.com

リストからuを削除する

リストの「u」という文字を削除する方法を読みましたが、Google App Engineを使用していますが、機能しないようです!

def get(self):
    players = db.GqlQuery("SELECT * FROM Player")
    print players
    playerInfo  = {}

    test = []

    for player in players:
        email =  player.email
        gem =  str(player.gem)
        a = "{email:"+email + ",gem:" +gem +"}"

        test.append(a)


    ast.literal_eval(json.dumps(test))
    print test

最終出力:

[u'{email:[email protected],gem:0}', u'{email:test,gem:0}', u'{email:test,gem:0}', u'{email:test,gem:0}', u'{email:test,gem:0}', u'{email:test1,gem:0}']
44
Brian Li

その「u」は文字列の外部表現の一部であり、バイト文字列ではなくUnicode文字列であることを意味します。文字列ではなく、型の一部です。

例として、同じsynaxを使用して、新しいUnicode文字列リテラルを作成できます。例えば:

>>> sandwich = u"smörgås"
>>> sandwich
u'sm\xf6rg\xe5s'

これにより、値がサンドイッチのスウェーデン語である新しいUnicode文字列が作成されます。英語以外の文字はUnicodeコードポイントで表されていることがわかります。öは\xf6およびåは\xe5。 'u'プレフィックスは、この文字列がUnicodeテキストを保持していることを示すため、例のように表示されます。

それらを取り除くには、Unicode文字列をUTF-8などのバイト指向の表現にエンコードする必要があります。あなたはそれを次のように行うことができます:

>>> sandwich.encode("utf-8")
'sm\xc3\xb6rg\xc3\xa5s'

ここでは、これはバイト文字列であるため、プレフィックス 'u'なしの新しい文字列を取得します。 Unicode文字列の文字を表すバイトが含まれており、スウェーデン語の文字はUTF-8エンコーディングの驚異のために複数バイトになります。

47
unwind
arr = [str(r) for r in arr]

これは基本的にすべての要素を文字列に変換します。したがって、エンコードが削除されます。したがって、エンコーディングを表すuは削除されます。作業は簡単かつ効率的に行われます。

18
anarcky

u'AB'は、対応するUnicode文字列の単なるテキスト表現です。まったく同じUnicode文字列を作成するいくつかのメソッドを次に示します。

L = [u'AB', u'\x41\x42', u'\u0041\u0042', unichr(65) + unichr(66)]
print u", ".join(L)

出力

AB, AB, AB, AB

memoryにはu''がありません。これは、representunicodeオブジェクトをPython 2(Unicode文字列リテラルをa Pythonソースコード)。デフォルトでは、print Lprint "[%s]" % ", ".join(map(repr, L))と同等です。つまり、 repr() function は各リスト項目に対して呼び出されます:

print L
print "[%s]" % ", ".join(map(repr, L))

出力

[u'AB', u'AB', u'AB', u'AB']
[u'AB', u'AB', u'AB', u'AB']

REPL=で作業している場合、カスタマイズ可能な sys.displayhook を使用して repr()

>>> L = [u'AB', u'\x41\x42', u'\u0041\u0042', unichr(65) + unichr(66)]
>>> L
[u'AB', u'AB', u'AB', u'AB']
>>> ", ".join(L)
u'AB, AB, AB, AB'
>>> print ", ".join(L)
AB, AB, AB, AB

バイトにエンコードしないでください。 Unicodeを直接印刷します


特定のケースでは、Pythonリストを作成し、json.dumps()を使用して、JSONテキストを作成するために文字列フォーマットを使用する代わりにそれをシリアル化します。

#!/usr/bin/env python2
import json
# ...
test = [dict(email=player.email, gem=player.gem)
        for player in players]
print test
print json.dumps(test)

出力

[{'email': u'[email protected]', 'gem': 0}, {'email': u'test', 'gem': 0}, {'email': u'test', 'gem': 0}, {'email': u'test', 'gem': 0}, {'email': u'test', 'gem': 0}, {'email': u'test1', 'gem': 0}]
[{"email": "[email protected]", "gem": 0}, {"email": "test", "gem": 0}, {"email": "test", "gem": 0}, {"email": "test", "gem": 0}, {"email": "test", "gem": 0}, {"email": "test1", "gem": 0}]
11
jfs

Uは、文字列がユニコードであることを意味します。すべての文字列をasciiに変換して削除します。

a.encode('ascii', 'ignore')
11
Intra

あなたは「リストから文字 'u'を削除する」ことはありません、あなたはnicode文字列をエンコードします。実際、あなたが持っている文字列はほとんどの用途で完全に素晴らしいです。出力する前に適切にエンコードする必要があります。

4
kindall
[u'{email:[email protected],gem:0}', u'{email:test,gem:0}', u'{email:test,gem:0}', u'{email:test,gem:0}', u'{email:test,gem:0}', u'{email:test1,gem:0}']

「u」はユニコード文字を示します。最終リスト要素のmap関数でこれを簡単に削除できます

map(str, test)

別の方法は、リストに追加するときです

test.append(str(a))
4
HimanshuGahlot