转换一个混合了unicode值和浮点数的python列表

2024-04-19 15:01:52 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我从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

输出:

^{pr2}$

我需要的是:

[ 121090999,  3454554455,  'Shantharam', 121090999,  5645,  'Puranik' ]

Tags: 字符串import列表unicode情况数字整数excel
3条回答

下面是将列表中的项转换为的list理解:

  1. str如果是{}
  2. int如果是{}
  3. 否则,按原样追加:

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条件),而不是将list转换为所需的格式

下面是一个简短的脚本,应该可以做到这一点:

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)

可以使用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']

相关问题 更多 >