2014-06-12 167 views
0

感謝提前看@此問題:函數之外的Python訪問變量

我試圖解析CSV文件,並返回某些字段的值。該代碼完全運行時內嵌的腳本,但是當我嘗試創建一個功能是其他模塊訪問瓦特/我的應用程序,我碰到與變量(鍵/值)我是從拉動的問題csv文件。

代碼來解析CSV(parseCsv.py):

groups =[] 
enterprise = [] 
workinglist = [] 

def parse_csv(filename): 
    quote_char = '"' 
    delimiter = ',' 
    csv_to_parse = open(filename, 'rb') 
    csv_reader = csv.DictReader(csv_to_parse, fieldnames=[], restkey='undefined-fieldnames', delimiter=delimiter, quotechar=quote_char) 
    current_row = 0 
    for row in csv_reader: 
    current_row +=1 
    if current_row == 1: 
     csv_reader.fieldnames = row['undefined-fieldnames'] 
     continue 
    groups.append(row['groupid']) 
    enterprise.append(row['enterprise']) 
    workinglist.append(row) 

我用團體,企業,workinglist的global參數審判;也嘗試添加了return groups, return workinglist, return enterprise

不管語法,我不能訪問這個功能之外的團體,企業,或workinglist變量。我需要在我的應用程序的其他部分處理這些結果。如果我在函數中添加print groups,它的行爲正確,但是從功能之外我結束了一個[].我也試圖讓parse_csv一個類的方法,加入了selfinit,沒有成功。

僅供參考,我從另一個文件中使用parse_csv(csvfilename)它導入該文件,並正確地讀取它調用此。

我敢肯定,這是一件很簡單,很快速的我失蹤,但在這這麼久了,我看不出它已經看呆了,任何幫助,將不勝感激!

+0

以減輕你的問題的識別,請刪除所有無關直到你有一個最小的例子來重現這個問題。 (通常是http://repl.it/UAZ輸出)。事實上,您的代碼可能依賴於外部文件,如csv內容,這會阻止任何人再現您的問題。 – njzk2

回答

2

您應該將列表作爲參數傳遞給函數,以便可以修改它們。這是它是如何工作的:

foo = [] 

def f(arg): 
    arg.append(1) 
    arg.append(2) 

f(foo) 
print foo # output: [1, 2] 

這是可行的,因爲這些列表是可變的,你可以通過引用傳遞它們。

,所以你需要實現的功能如下:

def parse_csv(filename, gr, ent, work): 
    ... 
    gr.append(123) 
    work.append(row) 
    ... 

那麼你可以這樣從每個文件調用它:

groups  = [] 
enterprise = [] 
workinglist = [] 

parse_csv(filename, groups, enterprise, workinglist) 

print groups # should contain the data read from CSV 
+0

工作**完美!! **非常感謝。我不能給予好評你,直到我得到一些更多的積分,但我肯定會一旦我有機會! – dirtyonekanobi