删除列表中的u

Bri*_* Li 44 python unicode google-app-engine

我已阅读删除列表中的字符'u',但我使用谷歌应用程序引擎,它似乎不起作用!

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
Run Code Online (Sandbox Code Playgroud)

最终输出:

[u'{email:test@gmail.com,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}']
Run Code Online (Sandbox Code Playgroud)

unw*_*ind 50

'u'是字符串外部表示的一部分,这意味着它是一个Unicode字符串而不是字节字符串.它不在字符串中,它是该类型的一部分.

例如,您可以使用相同的synax创建新的Unicode字符串文字.例如:

>>> sandwich = u"smörgås"
>>> sandwich
u'sm\xf6rg\xe5s'
Run Code Online (Sandbox Code Playgroud)

这将创建一个新的Unicode字符串,其值为三明治的瑞典语.您可以看到非英文字符由其Unicode代码点表示,ö是\xf6和å \xe5.'u'前缀与您的示例中的内容类似,表示此字符串包含Unicode文本.

要摆脱这些,您需要将Unicode字符串编码为一些面向字节的表示形式,例如UTF-8.你可以用例如:

>>> sandwich.encode("utf-8")
'sm\xc3\xb6rg\xc3\xa5s'
Run Code Online (Sandbox Code Playgroud)

在这里,我们得到一个没有前缀'u'的新字符串,因为这是一个字节字符串.它包含表示Unicode字符串字符的字节,由于UTF-8编码的奇迹,瑞典字符导致多个字节.

  • 不要混淆 Unicode 字符串(内存中的对象)及其文本表示(可用于在 Python 源代码中指定对象)。考虑`print(sandwich)` 和`print(repr(sandwich))`。不要将文本编码为字节。 (2认同)

ana*_*cky 18

arr = [str(r) for r in arr]
Run Code Online (Sandbox Code Playgroud)

这基本上会转换为字符串中的所有元素.因此删除了编码.因此,表示编码的u被删除将轻松有效地完成工作


Int*_*tra 13

你的意思是字符串是unicode.将所有字符串翻译为ascii以摆脱它:

a.encode('ascii', 'ignore')
Run Code Online (Sandbox Code Playgroud)


jfs*_*jfs 11

u'AB'只是相应Unicode字符串的文本表示.以下是几种创建完全相同的Unicode字符串的方法:

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

产量

AB, AB, AB, AB
Run Code Online (Sandbox Code Playgroud)

有没有u''记忆.这只是的方式表示unicode在Python 2的对象(你会怎么写的Unicode字符串在Python文字的源代码).默认情况下print L等效于print "[%s]" % ", ".join(map(repr, L))ie,为每个列表项调用repr()函数:

print L
print "[%s]" % ", ".join(map(repr, L))
Run Code Online (Sandbox Code Playgroud)

产量

[u'AB', u'AB', u'AB', u'AB']
[u'AB', u'AB', u'AB', u'AB']
Run Code Online (Sandbox Code Playgroud)

如果您正在使用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
Run Code Online (Sandbox Code Playgroud)

不要编码为字节.直接打印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)
Run Code Online (Sandbox Code Playgroud)

产量

[{'email': u'test@gmail.com', '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": "test@gmail.com", "gem": 0}, {"email": "test", "gem": 0}, {"email": "test", "gem": 0}, {"email": "test", "gem": 0}, {"email": "test", "gem": 0}, {"email": "test1", "gem": 0}]
Run Code Online (Sandbox Code Playgroud)


小智 5

[u'{email:test@gmail.com,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}']
Run Code Online (Sandbox Code Playgroud)

'u' 表示 unicode 字符。我们可以使用最终列表元素上的 map 函数轻松删除它

map(str, test)
Run Code Online (Sandbox Code Playgroud)

另一种方法是当您将其附加到列表时

test.append(str(a))
Run Code Online (Sandbox Code Playgroud)


Hil*_* AK 5

请使用map()Python函数。

输入:如果是值列表

索引 =[u'CARBO1004' u'CARBO1006' u'CARBO1008' u'CARBO1009' u'CARBO1020']

encoded_string = map(str, index)
Run Code Online (Sandbox Code Playgroud)

输出:['CARBO1004', 'CARBO1006', 'CARBO1008', 'CARBO1009', 'CARBO1020']

对于单个字符串输入:

index = u'CARBO1004'
# Use Any one of the encoding scheme.
index.encode("utf-8")  # To utf-8 encoding scheme
index.encode('ascii', 'ignore')  # To Ignore Encoding Errors and set to default scheme
Run Code Online (Sandbox Code Playgroud)

输出:'CARBO1004'