Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การทำให้ออบเจ็กต์ Python คงอยู่ (shelve)

โมดูล shelve ในไลบรารีมาตรฐานของ Python เป็นเครื่องมือที่เรียบง่ายแต่อย่างมีประสิทธิภาพสำหรับการเก็บข้อมูลอย่างคงอยู่ (persistent storage) เมื่อไม่จำเป็นต้องใช้ relational database ออบเจ็กต์ shelf ที่นิยามในโมดูลนี้เป็น dictionary-like object ที่ถูกเก็บอย่างคงอยู่ในไฟล์ดิสก์ สร้างไฟล์คล้ายกับฐานข้อมูล dbm บนระบบ UNIX เฉพาะชนิดข้อมูล string เท่านั้นที่ใช้เป็น key ใน dictionary พิเศษนี้ ส่วน value สามารถเป็นออบเจ็กต์ที่ picklable ได้ทุกชนิด

โมดูล shelve นิยามสามคลาสดังนี้:

ลำดับ โมดูล & คำอธิบาย
1 Shelf
เป็นคลาสฐานสำหรับ shelf implementations เริ่มต้นด้วย dict-like object
2 BsdDbShelf
เป็น subclass ของ Shelf dict object ที่ส่งให้คอนสตรัคเตอร์ต้องรองรับเมธอด first(), next(), previous(), last() และ set_location()
3 DbfilenameShelf
เป็น subclass ของ Shelf เช่นกัน แต่รับ filename เป็นพารามิเตอร์ให้คอนสตรัคเตอร์ แทนที่จะเป็น dict object

วิธีที่ง่ายที่สุดในการสร้าง Shelf object คือใช้ฟังก์ชัน open() ที่นิยามในโมดูล shelve ซึ่งคืนค่า DbfilenameShelf object

open(filename, flag='c', protocol=None, writeback=False)

พารามิเตอร์ filename ถูกกำหนดให้กับฐานข้อมูลที่สร้าง

ค่าเริ่มต้นของพารามิเตอร์ flag คือ 'c' สำหรับการเข้าถึงอ่าน/เขียน flag อื่นๆ คือ 'w' (เขียนอย่างเดียว) 'r' (อ่านอย่างเดียว) และ 'n' (ใหม่พร้อมอ่าน/เขียน)

พารามิเตอร์ protocol หมายถึง pickle protocol writeback parameter ค่าเริ่มต้นเป็น false หากตั้งเป็น true รายการที่เข้าถึงจะถูกแคช ทุกการเข้าถึงจะเรียก sync() และ close() ทำให้กระบวนการอาจช้าลง

โค้ดต่อไปนี้สร้างฐานข้อมูลและเก็บรายการ dictionary ไว้:

import shelve
s = shelve.open("test")
s['name'] = "Ajay"
s['age'] = 23
s['marks'] = 75
s.close()

จะสร้างไฟล์ test.dir ในไดเรกทอรีปัจจุบันและเก็บข้อมูล key-value ในรูปแบบแฮช Shelf object มีเมธอดต่อไปนี้:

ลำดับ เมธอด & คำอธิบาย
1 close()
ซิงโครไนซ์และปิด persistent dict object
2 sync()
เขียนคืนรายการทั้งหมดในแคช หาก shelf เปิดด้วย writeback=True
3 get()
คืนค่า value ที่เชื่อมโยงกับ key
4 items()
ลิสต์ของ tuples แต่ละ tuple เป็น key-value pair
5 keys()
ลิสต์ของ shelf keys
6 pop()
ลบ key ที่ระบุและคืนค่า value ที่ตรงกัน
7 update()
อัปเดต shelf จาก dict/iterable อื่น
8 values()
ลิสต์ของ shelf values

เพื่อเข้าถึงค่าของ key เฉพาะใน shelf:

>>> s = shelve.open('test')
>>> s['age']
23
>>> s['age'] = 25
>>> s.get('age')
25

เมธอด items(), keys() และ values() คืนค่า view objects:

>>> list(s.items())
[('name', 'Ajay'), ('age', 25), ('marks', 75)]
>>> list(s.keys())
['name', 'age', 'marks']
>>> list(s.values())
['Ajay', 25, 75]

เพื่อลบ key-value pair จาก shelf:

>>> s.pop('marks')
75
>>> list(s.items())
[('name', 'Ajay'), ('age', 25)]

สังเกตว่า key-value pair ของ marks-75 ถูกลบแล้ว

เพื่อรวมรายการของ dictionary อื่นกับ shelf ใช้เมธอด update():

>>> d = {'salary': 10000, 'designation': 'manager'}
>>> s.update(d)
>>> list(s.items())
[('name', 'Ajay'), ('age', 25), ('salary', 10000), ('designation', 'manager')]

ในบทความนี้เราเรียนรู้เกี่ยวกับโมดูล shelve ซึ่งให้กลไกที่สะดวกสำหรับเก็บ dictionary object แบบคงอยู่