Удаление u в списке
Я прочитал об удалении символа "u" в списке, но я использую механизм Google для работы с Google, и он не работает!
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}']
Ответы
Ответ 1
Это 'u' является частью внешнего представления строки, что означает строку Unicode, а не строку байта. Это не в строке, это часть типа.
В качестве примера вы можете создать новый строковый литерал Юникода, используя тот же синтаксис. Например:
>>> sandwich = u"smörgås"
>>> sandwich
u'sm\xf6rg\xe5s'
Это создает новую строку Юникода, значение которой является шведским словом для сэндвича. Вы можете видеть, что символы, отличные от английского, представлены их кодовыми точками Unicode, ö is \xf6
и å is \xe5
. Префикс 'u' отображается так же, как в вашем примере, чтобы обозначить, что эта строка содержит текст Unicode.
Чтобы избавиться от них, вам нужно закодировать строку Юникода в какое-то байт-ориентированное представление, такое как UTF-8. Вы можете сделать это, например:
>>> sandwich.encode("utf-8")
'sm\xc3\xb6rg\xc3\xa5s'
Здесь мы получаем новую строку без префикса 'u', так как это байтовая строка. Он содержит байты, представляющие символы строки Юникода, со шведскими символами, что приводит к появлению нескольких байтов из-за чудес в кодировке UTF-8.
Ответ 2
u означает, что строки являются unicode. Переведите все строки в ascii, чтобы избавиться от него:
a.encode('ascii', 'ignore')
Ответ 3
arr = [str(r) for r in arr]
Это в основном преобразует все ваши элементы в строку. Следовательно, удаляется кодировка. Следовательно, u, который представляет кодирование, удаляется
Будут делать работу легко и эффективно
Ответ 4
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''
. Это просто способ представления объекта unicode
в Python 2 (как вы должны писать строковый литерал Unicode в исходном коде 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}]
Ответ 5
Вы не "удаляете символ" u "из списка", вы кодируете строки Unicode. На самом деле строки, которые у вас есть, отлично подходят для большинства применений; вам просто нужно будет закодировать их соответствующим образом, прежде чем выводить их.
Ответ 6
[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. Мы можем легко удалить это с помощью функции отображения в конечном элементе списка
map(str, test)
Другим способом является добавление его в список
test.append(str(a))
Ответ 7
Для наборов данных 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])