2017-11-21 3 views
-1

파이썬을 배우려고 시도하면서 매일 생산성 작업에 사용하는 일부 powershell 스크립트를 복제하려고 시도하기 시작합니다. 나는이 방법은 파이썬에서 작동하지 않는 이유를 당신에게 사람을 물어보고 싶습니다 내가 CSV 파일을 가져오고 목록 (배열)에 출력을두고 함수를 작성하기 위해 노력하고있어python import csv function

def csvIn(path): 
    import csv 
    with open(path) as myFile: 
     csv = csv.reader(myFile) 
    return csv 

a = csvIn('C:/Users/xxxxxx/Desktop/DL/add.csv') 

for row in a: 
    print(row) 

. 함수 호출 외의 import csv를 호출하면 모든 것이 작동합니다. 함수 내부에서 시도 할 때 "ValueError : 닫힌 파일에 대한 입출력 작업"이라고 표시됩니다.

+2

당신은 어쩌면 때문에' 변수뿐만 아니라 모듈로 csv? –

+0

그런 이유로, 제 2 csv 이름의 이름을 csv2 또는 다른 것으로 변경하려고해도 동일한 오류가 발생합니다. – jambox

답변

0

with는 컨텍스트 관리자이므로 프로그램이 복귀 줄에 도달하면 파일이 닫혔습니다. 여기에 요청 함수로의 예로서 만하지 않고와 :

import csv 
PATH = 'C:/Users/xxxxxx/Desktop/DL/add.csv' 
with open(PATH) as myFile: 
    h_csv = csv.reader(myFile) 
    for row in h_csv: 
     print(row) 

편집 :

건설적인 제안은 단지 하나에 그것을 출시 할 것

import csv 

def csvIn(path): 
    myFile = open(path) 
    h_csv = csv.reader(myFile) 
    return h_csv 

a = csvIn('C:/Users/xxxxxx/Desktop/DL/add.csv') 

for row in a: 
    print(row) 
+0

완전히 동의합니다. 위에서 말했듯이, 그렇게하면 모든 것이 잘 작동합니다. 파이썬에서 함수로 어떻게 처리 할 수 ​​있을지 궁금해하고있었습니다. "with"를 사용하지 않고 그것을 수행 할 수있는 또 다른 방법이 있습니까? – user3723688

+0

물론 내 내장 편집을 참조하십시오. 파일 객체에 대한 핸들을 반환하는 함수가 실제로 필요하다는 것을 확신하지는 않습니다. 왜냐하면 파일 객체를 외부 범위에서 열어두기 때문입니다. 아마 iterator를 반환하게하는 것이 더 좋을 것입니다 - 그것은 두 세계의 최고입니다 -리스트처럼 취급하지만 많은 메모리를 사용하지 마십시오. – jambox

+1

그게 효과가있다. Upvoted 및 답변으로 표시. 고맙습니다. – user3723688