从 unicode 列表中获取正确的列表
Get proper list from list of unicode list
我有一个以列表形式包含 unicode 字符串的列表。
my_list = [u'[James, Williams, Kevin, Parker, Alex, Emma, Katie\xa0, Annie]']
我想要一个可以迭代的列表,例如;
name_list = [James, Williams, Kevin, Parker, Alex, Emma, Katie, Annie]
我已经尝试了几种可能的解决方案 here,但其中 none 对我有效。
# Tried
name_list = name_list.encode('ascii', 'ignore').decode('utf-8')
#Gives unicode return type
# Tried
ast.literal_eval(name_list)
#Gives me invalid token error
import unicodedata
lst = [u'[James, Williams, Kevin, Parker, Alex, Emma, Katie\xa0, Annie]']
lst = unicodedata.normalize("NFKD", lst[0])
lst2 = lst[1:-1].split(", ") # remove open and close brackets
print(lst2)
输出将是:
["James", "Williams", "Kevin", "Parker", "Alex", "Emma", "Katie ", "Annie"]
如果要删除所有空格 leading/trailing 空格:
lst3 = [i.strip() for i in lst2]
print(lst3)
输出将是:
["James", "Williams", "Kevin", "Parker", "Alex", "Emma", "Katie", "Annie"]
首先,列表没有 encode
方法,您必须对列表中的项目应用任何字符串方法。
其次,如果您正在考虑规范化字符串,您可以使用 Python 的 unicodedata
库中的 normalize
函数,阅读更多 here,这个删除不需要的字符 '\xa0'
并将帮助您规范化任何其他字符。
然后不要使用通常不安全的 eval
,而是使用列表理解来构建列表:
import unicodedata
li = [u'[James, Williams, Kevin, Parker, Alex, Emma, Katie\xa0, Annie]']
inner_li = unicodedata.normalize("NFKD", li[0]) #<--- notice the list selection
#get only part of the string you want to convert into a list
new_li = [i.strip() for i in inner_li[1:-1].split(',')]
new_li
>> ['James', 'Williams', 'Kevin', 'Parker', 'Alex', 'Emma', 'Katie', 'Annie']
在你预期的输出中,它们实际上是一个变量列表,除非事先声明,否则会给你一个错误。
这是正则表达式的一个很好的应用:
import re
body = re.findall(r"\[\s*(.+)\s*]", my_list[0])[0] # extract the stuff in []s
names = re.split("\s*,\s*", body) # extract the names
#['James', 'Williams', 'Kevin', 'Parker', 'Alex', 'Emma', 'Katie', 'Annie']
我有一个以列表形式包含 unicode 字符串的列表。
my_list = [u'[James, Williams, Kevin, Parker, Alex, Emma, Katie\xa0, Annie]']
我想要一个可以迭代的列表,例如;
name_list = [James, Williams, Kevin, Parker, Alex, Emma, Katie, Annie]
我已经尝试了几种可能的解决方案 here,但其中 none 对我有效。
# Tried
name_list = name_list.encode('ascii', 'ignore').decode('utf-8')
#Gives unicode return type
# Tried
ast.literal_eval(name_list)
#Gives me invalid token error
import unicodedata
lst = [u'[James, Williams, Kevin, Parker, Alex, Emma, Katie\xa0, Annie]']
lst = unicodedata.normalize("NFKD", lst[0])
lst2 = lst[1:-1].split(", ") # remove open and close brackets
print(lst2)
输出将是:
["James", "Williams", "Kevin", "Parker", "Alex", "Emma", "Katie ", "Annie"]
如果要删除所有空格 leading/trailing 空格:
lst3 = [i.strip() for i in lst2]
print(lst3)
输出将是:
["James", "Williams", "Kevin", "Parker", "Alex", "Emma", "Katie", "Annie"]
首先,列表没有 encode
方法,您必须对列表中的项目应用任何字符串方法。
其次,如果您正在考虑规范化字符串,您可以使用 Python 的 unicodedata
库中的 normalize
函数,阅读更多 here,这个删除不需要的字符 '\xa0'
并将帮助您规范化任何其他字符。
然后不要使用通常不安全的 eval
,而是使用列表理解来构建列表:
import unicodedata
li = [u'[James, Williams, Kevin, Parker, Alex, Emma, Katie\xa0, Annie]']
inner_li = unicodedata.normalize("NFKD", li[0]) #<--- notice the list selection
#get only part of the string you want to convert into a list
new_li = [i.strip() for i in inner_li[1:-1].split(',')]
new_li
>> ['James', 'Williams', 'Kevin', 'Parker', 'Alex', 'Emma', 'Katie', 'Annie']
在你预期的输出中,它们实际上是一个变量列表,除非事先声明,否则会给你一个错误。
这是正则表达式的一个很好的应用:
import re
body = re.findall(r"\[\s*(.+)\s*]", my_list[0])[0] # extract the stuff in []s
names = re.split("\s*,\s*", body) # extract the names
#['James', 'Williams', 'Kevin', 'Parker', 'Alex', 'Emma', 'Katie', 'Annie']