บันทึก dict ลงในไฟล์

Save Dict File



พจนานุกรมเป็นวัตถุที่มีชื่อเสียงมากในหลาม และเป็นชุดของคีย์และค่า คีย์ของ dict จะต้องไม่เปลี่ยนรูปแบบ และมันสามารถเป็นจำนวนเต็ม, ทุ่น, สตริงได้ แต่ตัวรายการหรือตัว dict เองไม่สามารถเป็นคีย์ได้ ดังนั้น บางครั้งเราจำเป็นต้องบันทึกวัตถุ dict ลงในไฟล์ ดังนั้นเราจะเห็นวิธีการต่าง ๆ ในการบันทึกวัตถุ dict ในไฟล์

เราสามารถเขียนพจนานุกรมลงในไฟล์ในภาษา Python ได้หลายวิธี เช่น







  1. ไฟล์ค่าที่คั่นด้วยเครื่องหมายจุลภาค (.csv)
  2. ไฟล์ Json (.json)
  3. ไฟล์ข้อความ (.txt)
  4. ไฟล์ดอง (.pkl)

เราจะอธิบายวิธีการข้างต้นทั้งหมด



วิธีที่ 1: บันทึกพจนานุกรมในรูปแบบ CSV

ในการบันทึกพจนานุกรมลงใน CSV (Comma Separated Values) เราใช้โมดูล CSV ค่าที่คั่นด้วยเครื่องหมายจุลภาคเพื่อบันทึก python dict เป็นวิธีการที่นิยมใช้กันมากที่สุด โปรแกรมเมอร์ส่วนใหญ่ใช้วิธีนี้เพื่อบันทึก dict ลงในไฟล์เท่านั้น การบันทึกพจนานุกรมเป็นไฟล์ CSV ทำได้ง่ายมาก เนื่องจากเราต้องถ่ายโอนข้อมูลเป็นสตริง



ตัวอย่าง_1: dict_to_csv.py





# dict_to_csv.py
นำเข้า csv

dict_sample= {'ชื่อ':'คำแนะนำลินุกซ์', 'เมือง':'นั่น', 'การศึกษา':'วิศวกรรม'}

กับ เปิด('data.csv', 'ใน') เช่นNS:
สำหรับกุญแจในdict_sampleกุญแจ():
NS.เขียน('% NSNS'%(กุญแจ,dict_sample[กุญแจ]))

สาย 2 : เรานำเข้าโมดูลหลาม CSV

สาย 4 : เราได้สร้างข้อมูล dict ตัวอย่าง เราจะพยายามบันทึกเป็นไฟล์ CSV



บรรทัดที่ 6: เราใช้คำสั่ง 'with' เพื่อเขียนไฟล์ CSV คำสั่ง 'with' จะจัดการข้อยกเว้นในการจัดการโดยอัตโนมัติระหว่างการอ่านหรือเขียนไฟล์ เราเปิดไฟล์ data.csv ในโหมดเขียนและกำหนดวัตถุนั้นให้กับตัวแปร f

สาย 7 เรากำลังเรียกใช้ for loop ที่แยกคีย์ และในบรรทัดถัดไป โปรแกรมจะเขียนคีย์และ key_value ไปยังไฟล์ CSV ดังนั้นลูปนี้จะทำงานจนกว่าจะมีข้อมูล

เอาต์พุต: data.csv

ชื่อ,Linuxคำแนะนำ
เมือง,นั่น
การศึกษา,วิศวกรรม

ดังนั้น ด้านบนจะแสดงไฟล์เอาต์พุตหลังจากเขียนบน data.csv

ตอนนี้เราเข้าใจวิธีการบันทึก dict ลงในไฟล์ในรูปแบบ CSV ลองใช้ตัวอย่างอื่นที่เราต้องการเขียนรายการวัตถุ dict ลงในไฟล์ CSV

ตัวอย่าง_2: dict_to_csv_2.py

# dict_to_csv_2.py

นำเข้า csv

csvColumns= ['เมือง', 'ประเทศ', 'อันดับ']
dictDemo= [
{'เมือง':'นิวยอร์ก', 'ประเทศ':'ใช้', 'อันดับ':3},
{'เมือง':'ซิดนีย์', 'ประเทศ':'ออสเตรเลีย', 'อันดับ':5},
{'เมือง':'ดูไบ', 'ประเทศ':'ยูเออี', 'อันดับ':10},
{'เมือง':'มุมไบ', 'ประเทศ':'อินเดีย', 'อันดับ':17},
{'เมือง':'ปักกิ่ง', 'ประเทศ':'จีน', 'อันดับ':7},
]
csvFileName= 'data.csv'
ลอง:
กับ เปิด(csvFileName, 'ใน') เช่นNS:
นักเขียน= csv.DictWriter(NS,ชื่อสนาม=csvColumns)
นักเขียนหัวเขียน()
สำหรับข้อมูลในdictDemo:
นักเขียนนักเขียน(ข้อมูล)
ยกเว้น IOError:
พิมพ์('มีข้อผิดพลาด')

บรรทัดที่ 3 ถึง 12: เรานำเข้าโมดูล python CSV และสร้างรายการวัตถุ dict นอกจากนี้เรายังสร้างรายชื่อคอลัมน์

สาย 13: เรากำหนดชื่อไฟล์ CSV ให้กับตัวแปร

บรรทัดที่ 15: เราใช้คำสั่ง 'with' และคำสั่งที่กำหนดเมธอด __enter__ ส่งคืนอ็อบเจ็กต์ไปยังตัวแปร f

บรรทัดที่ 16 ถึง 19: หลังจากกำหนดวัตถุส่งคืนให้กับตัวแปร f เราเรียกเมธอด DictWriter ของโมดูล CSV และส่งพารามิเตอร์สองตัว (ชื่อไฟล์ (f) และชื่อคอลัมน์) จากนั้นเราเรียกเมธอดอื่น writeheader () ซึ่งจะเขียนแถวแรกของไฟล์ CSV ซึ่งโดยทั่วไปจะเป็นชื่อของฟิลด์ จากนั้นเราเรียกใช้ for loop ในรายการของอ็อบเจ็กต์ dict และเขียนทีละไฟล์ไปยังไฟล์ CSV โดยใช้เมธอด writerow ()

วิธีที่ 2: บันทึก dict เป็นไฟล์ข้อความในรูปแบบ JSON (โหมดผนวก)

เราสามารถบันทึกวัตถุ dict ในรูปแบบของ JSON ลงในไฟล์ได้ รหัสด้านล่างจะอธิบายเช่นเดียวกัน รหัสนี้ยังอธิบายวิธีที่เราสามารถเพิ่ม JSON ใหม่ลงในรายการ JSON ที่มีอยู่

ตัวอย่าง : dict_to_file_asJSON.py

#dict_to_file_asJSON.py

นำเข้าjson

dictDemo= [
{'เมือง':'นิวยอร์ก', 'ประเทศ':'ใช้', 'อันดับ':3},
{'เมือง':'ซิดนีย์', 'ประเทศ':'ออสเตรเลีย', 'อันดับ':5},
{'เมือง':'ดูไบ', 'ประเทศ':'ยูเออี', 'อันดับ':10},
{'เมือง':'มุมไบ', 'ประเทศ':'อินเดีย', 'อันดับ':17},
{'เมือง':'ปักกิ่ง', 'ประเทศ':'จีน', 'อันดับ':7},
]

ชื่อไฟล์= 'dict.json'

# การเขียนรายการวัตถุ dict ไปยังไฟล์
กับ เปิด(ชื่อไฟล์,โหมด='ใน') เช่นNS:
เจสันทิ้ง(dictDemo,NS)

# การเขียนอ็อบเจกต์ dict ใหม่ลงในไฟล์แบบผนวกและเขียนทับทั้งไฟล์
กับ เปิด(ชื่อไฟล์,โหมด='ใน') เช่นNS:
dictDemoผนวก({'เมือง':'ปักกิ่ง', 'ประเทศ':'จีน'})
เจสันทิ้ง(dictDemo,NS)

เอาท์พุต : dict.json

[{'เมือง':'นิวยอร์ก', 'ประเทศ':'ใช้', 'อันดับ':3},
{'เมือง':'ซิดนีย์', 'ประเทศ':'ออสเตรเลีย', 'อันดับ':5},
{'เมือง':'ดูไบ', 'ประเทศ':'ยูเออี', 'อันดับ':10},
{'เมือง':'มุมไบ', 'ประเทศ':'อินเดีย', 'อันดับ':17},
{'เมือง':'ปักกิ่ง', 'ประเทศ':'จีน', 'อันดับ':7},
{'เมือง':'ปักกิ่ง', 'ประเทศ':'จีน'}
]

สาย 1 ถึง 13 : เรานำเข้าโมดูล JSON จากนั้นเราสร้างรายการของวัตถุ dict สำหรับการสาธิต จากนั้นเรากำหนดชื่อไฟล์ JSON ให้กับชื่อไฟล์ตัวแปร

สาย 15 ถึง 17 : เราใช้คำสั่ง 'with' เพื่อเปิดไฟล์ JSON เพื่อเขียน จากนั้นเราใช้เมธอด json.dump เพื่อแปลงอ็อบเจ็กต์ dict เป็น JSON แล้วเขียนลงในไฟล์

บรรทัดที่ 20 ถึง 22: เส้นเหล่านี้มีความสำคัญมากเพราะจะเกิดอะไรขึ้น? หากเราพยายามเพิ่มวัตถุ JSON ใหม่ให้กับไฟล์ที่เขียนไว้แล้ว ข้อมูลก่อนหน้านี้จะหายไปเนื่องจากการเขียนทับ จากนั้นเราสามารถใช้ชื่อรายการ dict ก่อนหน้าเหมือนที่เราทำ (dictDemo) จากนั้นเราผนวกอ็อบเจ็กต์ใหม่เข้าไป และสุดท้าย เราแปลงไฟล์ทั้งหมดเป็น JSON และเขียนทับทั้งไฟล์

ในผลลัพธ์ เราจะเห็นว่ามีการเพิ่มวัตถุ JSON ใหม่ลงในรายการ JSON ที่มีอยู่

วิธีที่ 3: บันทึกวัตถุพจนานุกรมลงในไฟล์ในรูปแบบ txt

นอกจากนี้เรายังสามารถบันทึกพจนานุกรมในรูปแบบสตริงปกติลงในไฟล์ได้ ดังนั้น วิธีการด้านล่างจึงเป็นวิธีที่ง่ายมากในการบันทึกวัตถุพจนานุกรมลงในไฟล์ในรูปแบบข้อความ แต่รหัสนี้จะไม่ทำงานหากเราต้องการผนวกวัตถุพจนานุกรมใหม่เข้ากับไฟล์เพราะจะเขียนทับข้อมูลที่เขียนไว้ก่อนหน้านี้ สำหรับสิ่งนั้น เราจะเห็นได้ในโค้ดถัดไป

ตัวอย่าง: dict_to_txt.py

#dict_to_txt.py

dictDemo= [
{'เมือง':'นิวยอร์ก', 'ประเทศ':'ใช้', 'อันดับ':3},
{'เมือง':'ซิดนีย์', 'ประเทศ':'ออสเตรเลีย', 'อันดับ':5},
{'เมือง':'ดูไบ', 'ประเทศ':'ยูเออี', 'อันดับ':10},
{'เมือง':'มุมไบ', 'ประเทศ':'อินเดีย', 'อันดับ':17},
{'เมือง':'ปักกิ่ง', 'ประเทศ':'จีน', 'อันดับ':7},
]

ชื่อไฟล์= 'dict.txt'

# การเขียนรายการวัตถุ dict ไปยังไฟล์
กับ เปิด(ชื่อไฟล์,โหมด='ใน') เช่นNS:
NS.เขียน(NS(dictDemo))

เอาท์พุท: dict.txt

[{'เมือง':'นิวยอร์ก', 'ประเทศ':'ใช้', 'อันดับ':3},
{'เมือง':'ซิดนีย์', 'ประเทศ':'ออสเตรเลีย', 'อันดับ':5},
{'เมือง':'ดูไบ', 'ประเทศ':'ยูเออี', 'อันดับ':10},
{'เมือง':'มุมไบ', 'ประเทศ':'อินเดีย', 'อันดับ':17},
{'เมือง':'ปักกิ่ง', 'ประเทศ':'จีน', 'อันดับ':7}]

สาย 1 ถึง 11 : เราได้สร้างรายการของวัตถุพจนานุกรมและกำหนดชื่อของไฟล์ dict.txt ให้กับชื่อไฟล์ตัวแปร

สาย 14 ถึง 15 : เราใช้คำสั่ง 'with' ซึ่งจัดการข้อยกเว้นโดยอัตโนมัติ และเรากำลังเขียนรายการวัตถุ dict เป็นสตริงลงในไฟล์

ตัวอย่าง: dict_to_txt_2.py

เราได้เห็นวิธีการบันทึกวัตถุ dict ลงในไฟล์ในรูปแบบ .txt แต่ในโค้ดด้านบนนี้ มีปัญหาอย่างหนึ่งในการต่อท้ายอ็อบเจกต์ใหม่ ดังนั้นเราจึงเปลี่ยนวิธีการผนวกจาก 'w' เป็น 'a' ซึ่งสามารถแก้ปัญหาของเราดังที่แสดงด้านล่างในโค้ด

#dict_to_txt_2.py

''':cvar
รหัสนี้จะบันทึกวัตถุ dict ในไฟล์ด้วย
ต่อท้ายโหมด
'' '

dictDemo= [
{'เมือง':'นิวยอร์ก', 'ประเทศ':'ใช้', 'อันดับ':3},
{'เมือง':'ซิดนีย์', 'ประเทศ':'ออสเตรเลีย', 'อันดับ':5},
{'เมือง':'ดูไบ', 'ประเทศ':'ยูเออี', 'อันดับ':10},
{'เมือง':'มุมไบ', 'ประเทศ':'อินเดีย', 'อันดับ':17},
{'เมือง':'ปักกิ่ง', 'ประเทศ':'จีน', 'อันดับ':7},
]

ชื่อไฟล์= 'dict_to_file_appendMode.txt'

# การเขียนรายการวัตถุ dict ไปยังไฟล์
กับ เปิด(ชื่อไฟล์,โหมด='ถึง') เช่นNS:
NS.เขียน(NS(dictDemo))

สาย 7 ถึง 15 : เราได้สร้างรายการของวัตถุพจนานุกรมและกำหนดชื่อของไฟล์ dict_to_file_appendMode.txt ให้กับชื่อไฟล์ตัวแปร

สาย 18 ถึง 19 : เราเปลี่ยนโหมด = 'a' ซึ่งจะช่วยแก้ปัญหาของเราได้ ผลลัพธ์ด้านล่างแสดงว่าเราได้เพิ่มวัตถุ dict สองรายการในไฟล์เดียวกันโดยไม่เขียนทับข้อมูลก่อนหน้า

เอาต์พุต: dict_to_file_appendMode.txt

[{'เมือง':'นิวยอร์ก', 'ประเทศ':'ใช้', 'อันดับ':3},
{'เมือง':'ซิดนีย์', 'ประเทศ':'ออสเตรเลีย', 'อันดับ':5},
{'เมือง':'ดูไบ', 'ประเทศ':'ยูเออี', 'อันดับ':10},
{'เมือง':'มุมไบ', 'ประเทศ':'อินเดีย', 'อันดับ':17},
{'เมือง':'ปักกิ่ง', 'ประเทศ':'จีน', 'อันดับ':7}]

[{'เมือง':'นิวยอร์ก', 'ประเทศ':'ใช้', 'อันดับ':3},
{'เมือง':'ซิดนีย์', 'ประเทศ':'ออสเตรเลีย', 'อันดับ':5},
{'เมือง':'ดูไบ', 'ประเทศ':'ยูเออี', 'อันดับ':10},
{'เมือง':'มุมไบ', 'ประเทศ':'อินเดีย', 'อันดับ':17},
{'เมือง':'ปักกิ่ง', 'ประเทศ':'จีน', 'อันดับ':7}]

วิธีที่ 4: บันทึกวัตถุ dict ลงในไฟล์โดยใช้วิธี pickle

นอกจากนี้เรายังสามารถบันทึกวัตถุ dict ไปยังไฟล์โดยใช้โมดูล python pickle โมดูล pickle รองรับอ็อบเจ็กต์จำนวนมากสำหรับการทำให้เป็นอนุกรมใน python และยังรองรับอ็อบเจ็กต์ dict

# dict_to_file_use_pickle.py

นำเข้า ดอง

dictDemo= [
{'เมือง':'นิวยอร์ก', 'ประเทศ':'ใช้', 'อันดับ':3},
{'เมือง':'ซิดนีย์', 'ประเทศ':'ออสเตรเลีย', 'อันดับ':5},
{'เมือง':'ดูไบ', 'ประเทศ':'ยูเออี', 'อันดับ':10},
{'เมือง':'มุมไบ', 'ประเทศ':'อินเดีย', 'อันดับ':17},
{'เมือง':'ปักกิ่ง', 'ประเทศ':'จีน', 'อันดับ':7},
]

ชื่อไฟล์= 'picklefile.pkl'

กับ เปิด(ชื่อไฟล์, 'ห่างออกไป') เช่นNS:
ดอง.ทิ้ง(dictDemo,NS)

สาย 3 ถึง 13 : เรานำเข้าโมดูล pickle และสร้างรายการของวัตถุ dict นอกจากนี้เรายังสร้างชื่อไฟล์ที่เราจะบันทึกวัตถุ dict ของเรา

สาย 15 ถึง 16 : เราใช้คำสั่ง 'with' และเปิดไฟล์ด้วยโหมดต่อท้ายและรูปแบบไบนารี จากนั้นเราดัมพ์อ็อบเจ็กต์ dict ลงในไฟล์

บทสรุป

ดังนั้นเราจึงได้เห็นวิธีการต่างๆ ในการบันทึกวัตถุพจนานุกรมลงในไฟล์ ขึ้นอยู่กับผู้ใช้ว่าต้องการบันทึกวัตถุลงในไฟล์อย่างไร วิธีการทั่วไปในการบันทึกวัตถุ dict ลงในไฟล์คือ JSON และ CSV รูปแบบ JSON และ CSV มีชื่อเสียงมากจากมุมมองของการเขียนโปรแกรมหรือง่ายต่อการจัดการในหลาม เราได้เห็นโหมดต่อท้ายของการบันทึกไฟล์ด้วย

รหัสสำหรับบทความนี้สามารถดาวน์โหลดได้จากลิงค์นี้:

https://github.com/shekharpandey89/save-dict-object-to-a-file