リストの「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}']
その「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エンコーディングの驚異のために複数バイトになります。
arr = [str(r) for r in arr]
これは基本的にすべての要素を文字列に変換します。したがって、エンコードが削除されます。したがって、エンコーディングを表すuは削除されます。作業は簡単かつ効率的に行われます。
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''
がありません。これは、representのunicode
オブジェクトをPython 2(Unicode文字列リテラルをa Pythonソースコード)。デフォルトでは、print L
はprint "[%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}]
Uは、文字列がユニコードであることを意味します。すべての文字列をasciiに変換して削除します。
a.encode('ascii', 'ignore')
あなたは「リストから文字 'u'を削除する」ことはありません、あなたはnicode文字列をエンコードします。実際、あなたが持っている文字列はほとんどの用途で完全に素晴らしいです。出力する前に適切にエンコードする必要があります。
[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))