2015-04-29 54 views
2

我使用Python的一個項目,並在它被設置了這樣的例如Python的 - 如何將CSV列轉換與數字數據轉換成整數

Brazil.800000 
United Kingdom.1200000 
Zimbabwe.5000 

第一個「.txt文件數據列'是國家,第二'列是數字數據。它們被一段時間隔開。我的任務是對數據進行數字排序。我使用下面的代碼從我找到的教程視頻中設法取得了一些進展。

import csv 
import operator 

inputFileName = ("worldpop(2).txt") 
infile = open(inputFileName, "r") 

csv1 = csv.reader(infile, delimiter = ".") 

sort = sorted(csv1, key = operator.itemgetter(1)) 

for eachline in sort: 
    print(eachline) 

但是,雖然這種方法將數據按第二列排序,但它將數字數據視爲字符串而不是整數。這意味着結果如下:

United Kingdom.1200000 
Zimbabwe.5000 
Brazil.800000 

我完全堅持如何讓這個程序看到作爲實際整數的第二列。你們能幫忙嗎?

非常感謝。

編輯:爲了澄清,我沒有試圖改變實際的文件,而只是將數據以排序的方式打印到IDLE。

回答

4

替換您的排序聲明的主要功能有一個該值轉換爲整數

sort = sorted(csv1, key = lambda x: int(x[1])) 
0

你需要將數字轉換爲int,所以你應該改變的關鍵在於:

key=lambda x:int(x[1]) 

另外作爲一個更pythonic的方式使用with *打開文件,而不是關閉打開文件! sorted功能用正確的密鑰基於int數行那樣:

>>> import csv 
>>> from operator import itemgetter 
>>> with open('infile.txt', 'r') as csvfile: 
...  spamreader = csv.reader(csvfile, delimiter='.') 
...  for row in sorted((i for i in spamreader),key=lambda x:int(x[1])): 
      print row 

結果:

['Zimbabwe', '5000'] 
['Brazil', '800000'] 
['United Kingdom', '1200000'] 

您也可以使用reverse=True ARG在sorted功能得到下降的結果:

['United Kingdom', '1200000'] 
['Brazil', '800000'] 
['Zimbabwe', '5000'] 

* with語句將在該進程終止後關閉文件!