2014-06-12 131 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