删除列表中的u

时间:2012-03-19 15:36:59

标签: python google-app-engine unicode

我已阅读删除列表中的字符'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

最终输出:

[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}']

8 个答案:

答案 0 :(得分:45)

'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编码的奇迹而产生多个字节。

答案 1 :(得分:15)

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

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

答案 2 :(得分:10)

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

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

答案 3 :(得分:10)

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

内存中没有u'' 。它只是在Python 2中表示 unicode对象的方式(如何在Python 源代码中编写Unicode字符串文字)。默认情况下,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

不要编码为字节。 Print unicode directly

在您的特定情况下,我将创建一个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'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}]

答案 4 :(得分:4)

你没有“从列表中删除字符'u',你编码Unicode字符串。事实上你拥有的字符串对于大多数用途来说都是完美的;你只需要在输出之前对它们进行适当的编码。

答案 5 :(得分:4)

[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}']

'u'表示unicode字符。我们可以使用最终列表元素

上的map函数轻松删除它
map(str, test)

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

test.append(str(a))

答案 6 :(得分:0)

请使用map() python函数。

输入:在值列表的情况下

index = [u'CARBO1004' u'CARBO1006' u'CARBO1008' u'CARBO1009' u'CARBO1020']

encoded_string = map(str, index)

输出:['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

输出:'CARBO1004'

答案 7 :(得分:-1)

对于python数据集,您可以使用索引。

tmpColumnsSQL = ("show columns in dim.date_dim")
hiveCursor.execute(tmpColumnsSQL)
columnlist = hiveCursor.fetchall()

for columns in jayscolumnlist:
    print columns[0]

for i in range(len(jayscolumnlist)):    
    print columns[i][0])