2009-09-22 5 views
1

Я пытаюсь сравнить два списка строк в python. Некоторые строки - это числа, но я не хочу использовать их как число, только для сравнения строк.Автоматическое преобразование строк в число в Python

Я прочитал строки из файла и поместить их в список, как это:

def main(): 
    inputFileName = 'BateCarteira.csv' 
    inputFile = open(inputFileName, "r") 

    bankNumbers = [] 

    for line in inputFile: 
     values = line[0:len(line)-1].split(';'); 

     if (len(values[0]) > 3): 
      bankNumbers.append(''+values[0]) 

Однако, когда я пытаюсь напечатать номер, он печатает как:

1,20091E + 11

код для печати:

print 'not in the list: ' + bankNumber 
    outputFile.write(bankNumber + '-') 

Что я могу сделать так, питон никогда не отбрасывает строку int?

простите за мой английский: D

+0

Что представляет собой файл csv для значения, которое преобразуется в 1 20091E + 11? Похоже, что у вас есть значение, большее, чем Int, и оно превращается в Float. – jmucchiello

+0

Если вы изменили код для печати следующим образом: 'print 'нет в списке:' + bankNumber, type (bankNumber)' Он напечатает тип значения bankNumber. Я предсказываю, что он напечатает «str», показывая вам, что это фактически тип строки; и я предсказываю, что если вы посмотрите в CSV-файл, вы увидите строку «1 20091E + 11». Не только Python никогда не конвертирует строку в float, не спрашивая вас, но это не тот формат, который я ожидал бы использовать Python при печати float. – steveha

ответ

3

Python никогда не преобразует строку в число, если не попробовать что-то вроде:

s = "1.2" 
a = float(s) 

Так что я думаю, что ваш файл .csv имеет строку «1, 20091E + 11 "внутри него. Также обратите внимание, что десятичная точка - это кома. Итак, если вы попытаетесь преобразовать его в float, преобразование завершится неудачно.

+0

Похоже, это правильно. Я подозреваю, что входной файл имеет неожиданные значения. Некоторые локации, такие как немецкий и французский, используют. в цифрах. – UberAlex

+0

Возможно, вам захочется взглянуть на стандартный библиотечный модуль «locale». –

+0

Да, это было правильно ... Функция atof также помогает. Язык португальский. –

2

Вам нужен модуль языкового стандарта для чтения чисел в формате локали (т. Е. С десятичной запятой, используемой в (большинстве) частях Европы).

import locale 
locale.setlocale(locale.LC_ALL, '') 
f = locale.atof("1,20091E+11") 
Смежные вопросы