2016-08-29 8 views
0

Итак, я читаю значения из excel и сохраняя внутри списка. Но по умолчанию он хранит строки как строки и цифры unicode как float. Я хочу преобразовать строки Unicode в обычные строки и поместить их в integer. Как мне это сделать?Преобразование списка python, имеющего сочетание значений 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' ] 
+0

Я думаю Shantharam & Puranik еще должна быть внутри '' ', правильно? –

ответ

0

Вы можете использовать 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'] 
0

Ниже list понимание для преобразования элементов в списке:

  1. str если unicode
  2. int если float
  3. остальное, добавить, как это:

Пример Пример:

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

Тем не менее, вместо того, конвертируя список в желаемый формат, вы должны сделать t HESE чеки (если условия) в то время, вы расширяете rowvalues

0

Вот короткий скрипт, который должен сделать трюк:

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) 
0

Ниже приведен список понимания кода, который делает именно то, что вы хотите:

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

 Смежные вопросы

  • Нет связанных вопросов^_^