转换混合了 unicode 值和浮点数的 python 列表
Convert a python list having a mix of unicode values and floating numbers
所以我从 excel 中读取值并存储在列表中。但默认情况下,它将字符串存储为 unicode 字符串,将数字存储为浮点数。我想将 unicode 字符串转换为普通字符串并将浮点数转换为整数。我该怎么做?
这是我的清单:
import xlrd
wb = xlrd.open_workbook("test.xlsx")
firstsheet = wb.sheet_by_index(0)
rows =1
rowvalues = []
while(rows <= (firstsheet.nrows)-1):
rowvalues.extend(firstsheet.row_values(rows))
rows+=1
print rowvalues
输出:
[121090999.0, 3454554455.0, u'Shantharam', 121090999.0, 5645.0, u'Puranik']
我需要的:
[ 121090999, 3454554455, 'Shantharam', 121090999, 5645, 'Puranik' ]
下面是将列表中的项目转换为的list
理解:
str
如果是unicode
int
如果是float
- 否则,按原样追加:
Sample Example:
>>> my_list = [121090999.0, 3454554455.0, u'Shantharam', 121090999.0, 5645.0, u'Puranik']
>>> [str(item) if isinstance(item, unicode) else int(item) if isinstance(item,float) else item for item in my_list]
# Output: [121090999, 3454554455, 'Shantharam', 121090999, 5645, 'Puranik']
但是,您应该在扩展 rowvalues
时进行这些检查(if 条件),而不是将列表转换为所需的格式
您可以使用isinstance检查变量的类型
rows = [121090999.0, 3454554455.0, u'Shantharam', 121090999.0, 5645.0, u'Puranik']
def convert_rows(rows):
for kk,vv in enumerate(rows):
if isinstance(vv,float):
rows[kk] = int(vv)
if isinstance(vv,unicode):
rows[kk] = vv.encode('ascii')
return rows
print( convert_rows(rows) )
# prints [121090999, 3454554455L, 'Shantharam', 121090999, 5645, 'Puranik']
这是一个应该可以解决问题的简短脚本:
l=[121090999.0, 3454554455.0, u'Shantharam', 121090999.0, 5645.0, u'Puranik'];
i=0
for i in range(len(l)-1):
if isinstance(l[i], float):
l[i]=int(l[i])
else:
l[i]=str(l[i])
print(l)
下面是完全符合您要求的列表理解代码:
[int(d) if isinstance(d, float) else str(d) if isinstance(d, unicode) else d for d in my_list]
运行 在您的 my_list
上输入此代码,您将收到以下响应:
new_list = [121090999, 3454554455, 'Shantharam', 121090999, 5645, 'Puranik']
您可以将元素的数据类型验证为:
type(new_list[-1]) # <type 'str'>
type(new_list[-2]) # <type 'int'>
所以我从 excel 中读取值并存储在列表中。但默认情况下,它将字符串存储为 unicode 字符串,将数字存储为浮点数。我想将 unicode 字符串转换为普通字符串并将浮点数转换为整数。我该怎么做?
这是我的清单:
import xlrd
wb = xlrd.open_workbook("test.xlsx")
firstsheet = wb.sheet_by_index(0)
rows =1
rowvalues = []
while(rows <= (firstsheet.nrows)-1):
rowvalues.extend(firstsheet.row_values(rows))
rows+=1
print rowvalues
输出:
[121090999.0, 3454554455.0, u'Shantharam', 121090999.0, 5645.0, u'Puranik']
我需要的:
[ 121090999, 3454554455, 'Shantharam', 121090999, 5645, 'Puranik' ]
下面是将列表中的项目转换为的list
理解:
str
如果是unicode
int
如果是float
- 否则,按原样追加:
Sample Example:
>>> my_list = [121090999.0, 3454554455.0, u'Shantharam', 121090999.0, 5645.0, u'Puranik']
>>> [str(item) if isinstance(item, unicode) else int(item) if isinstance(item,float) else item for item in my_list]
# Output: [121090999, 3454554455, 'Shantharam', 121090999, 5645, 'Puranik']
但是,您应该在扩展 rowvalues
您可以使用isinstance检查变量的类型
rows = [121090999.0, 3454554455.0, u'Shantharam', 121090999.0, 5645.0, u'Puranik']
def convert_rows(rows):
for kk,vv in enumerate(rows):
if isinstance(vv,float):
rows[kk] = int(vv)
if isinstance(vv,unicode):
rows[kk] = vv.encode('ascii')
return rows
print( convert_rows(rows) )
# prints [121090999, 3454554455L, 'Shantharam', 121090999, 5645, 'Puranik']
这是一个应该可以解决问题的简短脚本:
l=[121090999.0, 3454554455.0, u'Shantharam', 121090999.0, 5645.0, u'Puranik'];
i=0
for i in range(len(l)-1):
if isinstance(l[i], float):
l[i]=int(l[i])
else:
l[i]=str(l[i])
print(l)
下面是完全符合您要求的列表理解代码:
[int(d) if isinstance(d, float) else str(d) if isinstance(d, unicode) else d for d in my_list]
运行 在您的 my_list
上输入此代码,您将收到以下响应:
new_list = [121090999, 3454554455, 'Shantharam', 121090999, 5645, 'Puranik']
您可以将元素的数据类型验证为:
type(new_list[-1]) # <type 'str'>
type(new_list[-2]) # <type 'int'>