2014-03-03 75 views
0

我有一個巨大的CSV文件,其中顯示只有colume「名稱」和「運行時」 我的問題是,我必須排序文件,並打印前10分鐘,前10名最多從 行運行並打印 但是行「運行」包含這樣的文字:如何只顯示從CSV文件中的排序列表int

['http://dbpedia.org/ontology/runtime', 
'XMLSchema#double', 
'http://www.w3.org/2001/XMLSchema#double', 
'4140.0', 
'5040.0', 
'5700.0', 
'{5940.0|6600.0}', 
'NULL', 
'6480.0',....n] 

我怎麼排序列表中只顯示號碼

我的代碼遠:

import csv 

run = [] 

fp = urllib.urlopen('Film.csv') 

reader = csv.DictReader(fp,delimiter=',') 

for line in reader: 

    if line: 
      run.append(line) 

name = [] 

for row in run: 

    name.append(row['name']) 

    runtime = [] 

for row in run: 

    runtime.append(row['runtime']) 

runtime 

預期輸出:

csv文件contaist空值和尋找這樣的值{5940.0 | 6600.0}

預期輸出

'4140.0', 
'5040.0', 
'5700.0', 
'6600.0', 
'6800.0',....n] 

不方含空值,只有higest值在尋找 這樣的 {5940.0 | 6600.0}

+0

請確認您的代碼。 – msvalkon

+1

換句話說,你想*過濾*數據只包含數字?請在您的程序的預期輸出中編輯。 – msvalkon

+0

即時通訊新的抱歉代碼! –

回答

0

你可以像這樣過濾它,但你應該proba bly等待更好的答案。

>>>l=[1,1.3,7,'text'] 
>>>[i for i in l if type(i) in (type(1),type(1.0))] #only ints and floats allowed 
[1,1.3,7] 

雖然應該這樣做。

0

我的工作流程很可能是:使用str.isdigit()作爲過濾器,轉換成數字與BIF int()float()然後用sort()sorted()

0

雖然你可以使用很多答案,將在這裏顯示出來的一個,我個人會利用您的CSV文件的某一領域的知識:基於對runtime行的例子值

runtime = runtime[3:] 

,前三列包含元數據。所以你知道更多關於你的輸入文件的結構,而不僅僅是「它是一個csv文件」。

然後,所有你需要做的是排序:

runtime = sorted(runtime) 
max_10 = runtime[-10:] 
min_10 = runtime[:10] 

我在這裏使用的語法被稱爲「切片」,它允許你訪問一個範圍序列中的,通過指定起始索引和用冒號分隔的方括號中的「最多但不包括」索引。巧妙的技巧:負指數換行被視爲從序列的末尾開始。

相關問題