บทนำ
โปรแกรมเมอร์ Python ใช้อาร์เรย์ รายการ และพจนานุกรมอย่างเข้มข้นเป็นโครงสร้างข้อมูลแบบอนุกรม การจัดเก็บโครงสร้างข้อมูลเหล่านี้จำเป็นต้องมีไฟล์หรือฐานข้อมูลเพื่อให้ทำงานได้อย่างถูกต้อง
ในบทความนี้ เราจะมาดูวิธีการเขียนรายการไปยังไฟล์ และวิธีอ่านรายการนั้นกลับเข้าไปในหน่วยความจำ
ไปยัง เขียนข้อมูลลงในไฟล์และเพื่อ อ่านข้อมูลจากไฟล์, ภาษาโปรแกรม Python นำเสนอวิธีการมาตรฐาน write()
และ read()
สำหรับการจัดการกับบรรทัดเดียวเช่นเดียวกับ writelines()
และ readlines()
เพื่อจัดการกับหลายบรรทัด นอกจากนี้ ทั้ง pickle
และ json
โมดูลช่วยให้วิธีที่ชาญฉลาดในการจัดการกับชุดข้อมูลที่เป็นอนุกรมเช่นกัน
การใช้ อ่าน() และ เขียน() วิธีการ
เพื่อจัดการกับอักขระ (สตริง) พื้นฐาน read()
และ write()
วิธีการทำงานได้อย่างยอดเยี่ยม บันทึกรายการดังกล่าวทีละบรรทัดลงในไฟล์ listfile.txt
สามารถทำได้ดังนี้:
places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']
with open('listfile.txt', 'w') as filehandle:
for listitem in places:
filehandle.write(f'{listitem}n')
พื้นที่ listitem
ถูกขยายโดยตัวแบ่งบรรทัด "n"
ก่อนแล้วจึงจัดเก็บไว้ในไฟล์เอาต์พุต ตอนนี้เรามาดูวิธีการอ่านรายการทั้งหมดจากไฟล์ listfile.txt
กลับเข้าไปในหน่วยความจำ:
places = []
with open('listfile.txt', 'r') as filehandle:
for line in filehandle:
curr_place = line[:-1]
places.append(curr_place)
โปรดทราบว่าคุณจะต้องลบตัวแบ่งบรรทัดออกจากส่วนท้ายของสตริง ในกรณีนี้ มันช่วยเราที่ Python อนุญาตให้ดำเนินการรายการกับสตริงได้เช่นกัน การลบนี้ทำได้ง่ายๆ เป็นการดำเนินการรายการในสตริง ซึ่งเก็บทุกอย่างไว้ ยกเว้นองค์ประกอบสุดท้าย องค์ประกอบนี้มีอักขระ "n"
ที่แสดงถึงตัวแบ่งบรรทัดบนระบบ UNIX/Linux
การใช้ สายการเขียน () และ การอ่าน () วิธีการ
ตามที่กล่าวไว้ในตอนต้นของบทความนี้ Python ยังมีสองวิธี – writelines()
และ readlines()
- การเขียนและอ่านหลายบรรทัดในขั้นตอนเดียวตามลำดับ มาเขียนรายการทั้งหมดลงในไฟล์บนดิสก์กันเถอะ:
places_list = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']
with open('listfile.txt', 'w') as filehandle:
filehandle.writelines(f"{place for place in places_list}n")
หากต้องการอ่านรายการทั้งหมดจากไฟล์บนดิสก์ เราต้อง:
places = []
with open('listfile.txt', 'r') as filehandle:
filecontents = filehandle.readlines()
for line in filecontents:
curr_place = line[:-1]
places.append(curr_place)
โค้ดด้านบนเป็นไปตามแนวทางดั้งเดิมที่ยืมมาจากภาษาโปรแกรมอื่นๆ มาเขียนต่อกันดีกว่า ไพธอน วิธีการ:
places = []
with open('listfile.txt', 'r') as filehandle:
places = [current_place.rstrip() for current_place in filehandle.readlines()]
ประการแรก เนื้อหาไฟล์จะถูกอ่านผ่าน readlines()
. ประการที่สอง ใน for
วนซ้ำจากแต่ละบรรทัดอักขระตัวแบ่งบรรทัดจะถูกลบออกโดยใช้ rstrip()
กระบวนการ. ประการที่สาม สตริงจะถูกเพิ่มลงในรายการสถานที่เป็นรายการใหม่
เมื่อเปรียบเทียบกับรายการก่อนที่โค้ดจะมีขนาดกะทัดรัดกว่ามาก แต่อาจอ่านยากกว่าสำหรับโปรแกรมเมอร์ Python มือใหม่
การใช้โมดูล Joblib
วิธีการเริ่มต้นที่อธิบายจนถึงตอนนี้จัดเก็บรายการในลักษณะที่มนุษย์ยังสามารถอ่านได้ ซึ่งเป็นรายการตามลำดับในไฟล์อย่างแท้จริง เหมาะอย่างยิ่งสำหรับการสร้างรายงานอย่างง่ายหรือการส่งออกไฟล์สำหรับผู้ใช้เพื่อใช้งานต่อไป เช่น ไฟล์ CSV อย่างไรก็ตาม หากเป้าหมายของคุณคือการเรียงลำดับรายการให้เป็นไฟล์ ซึ่งสามารถโหลดได้ในภายหลัง ไม่จำเป็นต้องจัดเก็บไว้ในรูปแบบที่มนุษย์อ่านได้
พื้นที่ joblib
โมดูลให้วิธีที่ง่ายที่สุดในการดัมพ์อ็อบเจกต์ Python (สามารถเป็นอ็อบเจกต์ใดๆ ก็ได้):
import joblib
places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']
joblib.dump(places, 'places.sav')
places = joblib.load('places.sav')
print(places)
joblib
ยังคงเป็นวิธีที่ง่ายและสะอาดที่สุดในการจัดลำดับออบเจ็กต์ในรูปแบบที่มีประสิทธิภาพ และโหลดในภายหลัง คุณสามารถใช้รูปแบบใดก็ได้เช่น .sav
, .data
, ฯลฯ ไม่สำคัญหรอก – ทั้งคู่ joblib
และทางเลือกอื่นๆ เช่น pickle
จะอ่านไฟล์ได้ดี
การใช้ ดอง โมดูล
เพื่อเป็นทางเลือกในการ joblib
, เราสามารถใช้ pickle
! ของมัน dump()
วิธีจัดเก็บรายการอย่างมีประสิทธิภาพเป็นสตรีมข้อมูลไบนารี ประการแรกไฟล์เอาต์พุต listfile.data
ถูกเปิดสำหรับการเขียนไบนารี ("wb"
). ประการที่สอง รายการจะถูกเก็บไว้ในไฟล์ที่เปิดโดยใช้ dump()
วิธี:
import pickle
places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']
with open('listfile.data', 'wb') as filehandle:
pickle.dump(places, filehandle)
ในขั้นตอนต่อไป เราอ่านรายการจากไฟล์ดังนี้ ประการแรกไฟล์เอาต์พุต listfile.data
ถูกเปิดไบนารีสำหรับการอ่าน ("rb"
). ประการที่สอง รายการสถานที่ถูกโหลดจากไฟล์โดยใช้ปุ่ม load()
วิธี:
import pickle
with open('listfile.data', 'rb') as filehandle:
placesList = pickle.load(filehandle)
สองตัวอย่างนี้แสดงให้เห็นถึงการใช้สตริง แม้ว่า, pickle
ใช้งานได้กับอ็อบเจ็กต์ Python ทุกประเภท เช่น สตริง ตัวเลข โครงสร้างแบบกำหนดตัวเอง และโครงสร้างข้อมูลในตัวอื่นๆ ที่ Python มีให้
การใช้รูปแบบ JSON
รูปแบบข้อมูลไบนารี pickle
การใช้งานนั้นเฉพาะกับ Python เพื่อปรับปรุงการทำงานร่วมกันระหว่างโปรแกรมต่างๆ JavaScript Object Notation (JSON) มีสคีมาที่ใช้งานง่ายและมนุษย์สามารถอ่านได้ ดังนั้นจึงเป็นที่นิยมอย่างมากสำหรับการจัดลำดับไฟล์และแชร์ไฟล์ผ่าน API
ดูคู่มือเชิงปฏิบัติสำหรับการเรียนรู้ Git ที่มีแนวทางปฏิบัติที่ดีที่สุด มาตรฐานที่ยอมรับในอุตสาหกรรม และเอกสารสรุปรวม หยุดคำสั่ง Googling Git และจริงๆ แล้ว เรียน มัน!
ตัวอย่างต่อไปนี้สาธิตวิธีเขียนรายการประเภทตัวแปรแบบผสมลงในไฟล์เอาต์พุตโดยใช้คำสั่ง JSON โมดูล. เมื่อเปิดไฟล์เอาต์พุตเพื่อเขียนแล้ว dump()
เมธอดเก็บรายการพื้นฐานในไฟล์โดยใช้สัญกรณ์ JSON:
import json
basic_list = [1, "Cape Town", 4.6]
with open('listfile.txt', 'w') as filehandle:
json.dump(basic_list, filehandle)
การอ่านเนื้อหาของไฟล์ที่ส่งออกกลับเข้าสู่หน่วยความจำนั้นง่ายพอๆ กับการเขียนข้อมูล วิธีการที่สอดคล้องกันเพื่อ dump()
ชื่อ load()
:
import json
with open('listfile.txt', 'r') as filehandle:
basic_list = json.load(filehandle)
สรุป
วิธีการต่างๆ ที่เราได้แสดงไว้ข้างต้นมีตั้งแต่การเขียน/อ่านข้อมูลอย่างง่ายไปจนถึงการดัมพ์/โหลดข้อมูลผ่านไบนารีสตรีมโดยใช้ Pickle และ JSON วิธีนี้ช่วยลดความยุ่งยากในการจัดเก็บรายการอย่างต่อเนื่องและอ่านกลับเข้าไปในหน่วยความจำ