Python, gunakan daftar kamus yang dikembalikan dari suatu fungsi

Aug 19 2020

Saya mencoba mengembalikan daftar kamus dan kemudian menggunakannya di luar fungsi:

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

         return dataDict    

Tapi ketika saya memanggil fungsi t, saya mendapatkan error "ValueError: Operasi I / O pada file tertutup."

myDict = myfunc()

for row in myDict:
    print(row)

Bagaimana saya harus mendeklarasikan dan menggunakan daftar kamus? Setelah kamus dikembalikan, saya juga perlu mengakses nama bidangnya. Kiat atau bantuan apa pun sangat dihargai.

Jawaban

1 snakecharmerb Aug 19 2020 at 00:13

The withpernyataan secara otomatis menutup file. Saat Anda mencoba mengakses data melalui DictReader di luar withpernyataan, DictReader tidak dapat mengakses file yang ditutup, sehingga Anda mendapatkan IOError.

Anda bisa menyiasatinya dengan mengumpulkan baris dari file ke dalam daftar sebelum kembali dari fungsi:

 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 malas. Sebenarnya mengubahnya menjadi daftar dan mengembalikannya, sehingga file dibaca saat masih terbuka.

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

Anda dapat menyalinnya ke variabel lain dan mengembalikan ...

 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  

ganti nama kolom dengan yang ada di csv.