2009-09-22 60 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 2009-09-22 20:36:40

+0

如果更改打印代码,如下所示: 'print'不在列表中:'+ bankNumber,type(bankNumber)' 它将打印bankNumber值的类型。我预测它会打印“str”,告诉你它实际上是一个字符串类型;我预测如果你查看CSV文件,你会看到字符串“1,20091E + 11”。 Python不会在不询问你的情况下将字符串转换为float,但这不是我期望Python在打印float时使用的格式。 – steveha 2009-09-22 23:02:23

回答

3

的Python从来没有转换字符串到数字,除非你尝试类似:

s = "1.2" 
a = float(s) 

所以我想,你的.csv文件具有字符串“1, 20091E + 11“。还要注意小数点是昏迷。所以,如果您尝试将其转换为浮点数,则转换将失败。

+0

这样的声音是正确的。我怀疑输入文件有意想不到的值。一些地区如德语和法语使用,因为。数量。 – UberAlex 2009-09-22 20:44:46

+0

你可能想看看标准的“locale”库模块。 – 2009-09-22 21:22:20

+0

是的,这是正确的... atof函数也有帮助。 该语言是葡萄牙语。 – 2009-09-23 21:58:52

2

您需要使用区域设置模块读取区域设置格式的数字(即使用欧洲(大部分)部分使用的十进制逗号)。

import locale 
locale.setlocale(locale.LC_ALL, '') 
f = locale.atof("1,20091E+11")