J'ai lu sur supprimer le caractère "u" dans une liste, mais j'utilise le moteur d'application Google et cela ne semble pas fonctionner!
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
Sortie finale:
[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}']
Ce "u" fait partie de la représentation externe de la chaîne, ce qui signifie qu'il s'agit d'une chaîne Unicode, par opposition à une chaîne d'octets. Ce n'est pas dans la chaîne, cela fait partie du type.
Par exemple, vous pouvez créer un nouveau littéral de chaîne Unicode en utilisant la même synaxe. Par exemple:
>>> sandwich = u"smörgås"
>>> sandwich
u'sm\xf6rg\xe5s'
Cela crée une nouvelle chaîne Unicode dont la valeur est le mot suédois pour sandwich. Vous pouvez voir que les caractères non anglais sont représentés par leurs points de code Unicode, ö est \xf6
et å est \xe5
. Le préfixe "u" apparaît comme dans votre exemple pour indiquer que cette chaîne contient du texte Unicode.
Pour vous en débarrasser, vous devez coder la chaîne Unicode en une représentation orientée octet, telle que UTF-8. Vous pouvez le faire avec, par exemple:
>>> sandwich.encode("utf-8")
'sm\xc3\xb6rg\xc3\xa5s'
Ici, nous obtenons une nouvelle chaîne sans le préfixe 'u', puisqu'il s'agit d'une chaîne d'octets. Il contient les octets représentant les caractères de la chaîne Unicode, les caractères suédois résultant en plusieurs octets en raison des merveilles du codage UTF-8.
arr = [str(r) for r in arr]
Cela convertit tous vos éléments en chaîne. Supprime donc l'encodage. Par conséquent, le u qui représente le codage est supprimé Fait le travail facilement et efficacement
u'AB'
Est simplement une représentation textuelle de la chaîne Unicode correspondante. Voici plusieurs méthodes qui créent exactement la même chaîne Unicode:
L = [u'AB', u'\x41\x42', u'\u0041\u0042', unichr(65) + unichr(66)]
print u", ".join(L)
AB, AB, AB, AB
Il n'y a pas de u''
Dans la mémoire . C’est juste le moyen de représenter l’objet unicode
dans Python 2 (comment vous écririez le littéral de chaîne Unicode dans un Python code source )). Par défaut, print L
équivaut à print "[%s]" % ", ".join(map(repr, L))
c'est-à-dire repr()
fonction est appelé pour chaque élément de la liste:
print L
print "[%s]" % ", ".join(map(repr, L))
[u'AB', u'AB', u'AB', u'AB']
[u'AB', u'AB', u'AB', u'AB']
Si vous travaillez dans un REPL alors un personnalisable sys.displayhook
est utilisé pour appeler repr()
sur chaque objet par défaut:
>>> 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
Ne pas encoder en octets. Imprimer unicode directement .
Dans votre cas spécifique, je créerais une liste Python et utiliserais json.dumps()
] pour la sérialiser au lieu d'utiliser le formatage de chaîne pour créer du texte 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}]
Le u signifie que les chaînes sont unicode. Traduisez toutes les chaînes en ascii pour vous en débarrasser:
a.encode('ascii', 'ignore')
Vous ne "supprimez pas le caractère 'u' d'une liste", vous encodez des chaînes Unicode. En fait, vos chaînes conviennent parfaitement à la plupart des utilisations; vous aurez juste besoin de les encoder correctement avant de les sortir.
[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" désigne les caractères unicode. Nous pouvons facilement supprimer cela avec la fonction map sur l'élément de liste final
map(str, test)
Une autre façon est quand vous l'ajoutez à la liste
test.append(str(a))