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 operation on closed file"

myDict = myfunc()

for row in myDict:
    print(row)

ฉันจะประกาศและใช้รายการพจนานุกรมได้อย่างไร? เมื่อส่งคืนพจนานุกรมแล้วฉันจำเป็นต้องเข้าถึงชื่อเขตข้อมูลด้วย คำแนะนำหรือความช่วยเหลือใด ๆ จะได้รับการชื่นชมอย่างมาก

คำตอบ

1 snakecharmerb Aug 19 2020 at 00:13

withคำสั่งโดยอัตโนมัติปิดไฟล์ เมื่อคุณพยายามเข้าถึงข้อมูลผ่าน DictReader ภายนอกwithคำสั่ง 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