2009-09-22 22 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")