2012-10-22 59 views
1

我想寫一個函數,從文本文件返回一個城市列表,以便當該函數被調用時,你可以把一個索引後面,它將返回相應的城市。返回一個文本文件中的項目列表索引

例子:

citylist('MYFILE.txt')[3] 

到目前爲止,我有

def citylist(filename): 
    assert type(filename)==str 

    with open(filename) as FileObject: 
     for line in FileObject: 
      q=line.split('\t') 
      print q[12], 

有500個投訴。在將每個字符串(投訴)分成列表後,城市名稱是列表中的第13個索引。但我堅持我所能做的就是將所有的城市名稱都打印爲無法編入索引的非數據類型。

+0

你能對這個「,但我堅持,因爲所有的澄清,我可以把它做的是打印所有的城市名作爲無法索引的非數據類型「? – pogo

+0

函數需要返回一些東西,以便您對結果做些什麼。 – kreativitea

+0

斷言你得到某種類型在python代碼中不是很典型。更常見的用法是嘗試使用你擁有的任何東西,並處理可能發生的任何異常。 – mgilson

回答

1

您可以創建一個列表,並返回它:

def citylist(filename): 
    assert type(filename)==str #isinstance(filename,str) is more idiomatic here. 

    output = [] 
    with open(filename) as FileObject: 
    for line in FileObject: 
     q = line.split('\t') 
     output.append(q[12]) 
    return output 

或者,更簡潔:

def citylist(filename): 
    with open(filename) as f: 
     return [ line.split('\t')[12] for line in f ] 

,我已經建立在這個最後的例子使用list-comprehension名單。

+0

謝謝..這兩個工作..忘了添加我需要擺脫尾隨空白,所以只是添加脫衣舞方法q [12] ..有點失望我可以得到這個我仍然是一個新生但是,謝謝 – Joe

+0

@MarcoJ - 沒有問題。不要擔心 - 只要繼續工作,你就會習慣Python中的事情。祝你好運。 – mgilson

0
def citylist(filename): 
    assert isinstance(filename, str) 
    return [line.split('\t')[12] for line in open(filename)] 

列表理解爲等同於以下擴展for循環:

result = [] 
for line in open(filename): 
    result.append(line.split('\t')[12]) 
相關問題