Python, 함수에서 반환 된 사전 목록 사용

Aug 19 2020

사전 목록을 반환 한 다음 함수 외부에서 사용하려고합니다.

 def myfunc():
     fileName: some file on my system
     with open(fileName) as csv1:
         dataDict = csv.DictReader(csv1, delimiter=',')

         return dataDict    

하지만 t 함수를 호출하면 "ValueError : 닫힌 파일에 대한 I / O 작업"오류가 발생합니다.

myDict = myfunc()

for row in myDict:
    print(row)

사전 목록을 선언하고 사용하려면 어떻게해야합니까? 사전이 반환되면 해당 필드 이름에도 액세스해야합니다. 모든 팁이나 도움을 주시면 대단히 감사하겠습니다.

답변

1 snakecharmerb Aug 19 2020 at 00:13

with명령문은 자동으로 파일을 닫습니다. with문 외부에서 DictReader를 통해 데이터에 액세스하려고 하면 DictReader가 닫힌 파일에 액세스 할 수 없으므로 IOError가 발생합니다.

함수에서 반환하기 전에 파일의 행을 목록으로 모아서이 문제를 해결할 수 있습니다.

 def myfunc():
     fileName: some file on my system
     with open(fileName) as csv1:
         dataDict = csv.DictReader(csv1, delimiter=',')
         list_of_dicts = list(datadict)
         return list_of_dicts
1 superbrain Aug 18 2020 at 23:50

DictReader는 게으르다. 실제로 파일을 목록으로 변환하고 반환하면 파일이 열려있는 동안 읽을 수 있습니다.

def myfunc():
     fileName: some file on my system
     with open(fileName) as csv:
         return list(csv.DictReader(csv, delimiter=','))
1 Oin Aug 18 2020 at 23:46

다른 변수에 복사하여 반환 할 수 있습니다.

 def myfunc():
     fileName: some file on my system
     mydict = {}
     with open(fileName) as f: 
         for row in csv.DictReader(f, delimiter=','):
             mydict[row['first_column']] = row['second_column'] + row['third_column']

     return mydict  

열 이름을 csv의 이름으로 바꿉니다.