2014-06-12 3 views
0

@이 질문을하기 위해 미리 감사드립니다 :파이썬 액세스 함수 외부 함수

CSV 파일을 구문 분석하고 특정 필드의 값을 반환하려고합니다. 이 코드는 스크립트로 인라인 할 때 완벽하게 실행되지만 내 앱에서 다른 모듈이 액세스 할 수있는 함수를 만들려고 할 때 변수 (키/값)와 관련된 문제가 발생합니다. CSV 파일.

코드 CSV (parseCsv.py를) 구문 분석 : 나는 그룹, 기업 및 workinglist에 대한 global 매개 변수를 사용하려고했습니다

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) 

; 또한 추가하려고 시도했습니다. return groups, return workinglist, return enterprise

구문에 관계없이이 함수 외부의 그룹, 엔터프라이즈 또는 작업 목록 변수에 액세스 할 수 없습니다. 내 애플 리케이션의 다른 부분에서 이러한 결과를 조작해야합니다. 함수 내에서 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