Python – File I/O
ไฟล์ คือ รูปแบบการเก็บข้อมูลบนดิสก์ซึ่งจะใช้ในเก็บข้อมูลในหน่วยความจำแบบถาวร โดยจะใช้ชื่อไฟล์ที่กำกับไว้ตอนบันทึกข้อมูลสำหรับอ้างอิงของตำแหน่งของข้อมูลดังกล่าว โดยการบันทึกข้อมูลในรูปแบบไฟล์บนคอมพิวเตอร์นั้น จะมีชนิดของไฟล์ค่อนข้างหลากหลาย แต่สำหรับชนิดของไฟล์ที่จะยกตัวอย่างในการอ่าน/เขียนข้อมูลสำหรับบทความนี้ เป็นไฟล์ข้อมูลและไฟล์รูปภาพซึ่งจัดเป็นไฟล์ชนิด text และ binary ตามลำดับ

ตัวอย่างลักษณะของไฟล์ข้อมูลและรูปภาพ
เนื่องจากข้อมูลที่ถูกบันทึกในรูปแบบไฟล์นั้นถูกจัดเก็บบนหน่วยความจำแบบถาวร สำหรับอุปกรณ์ชนิดดังกล่าวดังกล่าว แม้ไม่มีไฟเลี้ยงส่งไปให้อุปกรณ์ก็จะยังมีข้อมูลเก็บอยู่ในหน่วยความจำ(non-valtile memory)หากข้อมูลถูกบันทึกไปแล้ว เช่น อุปกรณ์เก็บข้อมูล ฮาร์ดิสก์(harddisk), ยูเอสบีไดรฟ์(usb drive) โดยหน่วยความจำแบบถาวรนั้นจะมีความแตกต่างกับหน่วยความจำแบบชั่วคราว(volatile memory) เช่นอุปกรณ์จำพวกแรม(RAM: random access memeory) ซึ่งอุปกรณ์เก็บข้อมูลบนหน่วยความจำชั่วคราวนี้ อุปกรณ์ดังกล่าวจะสูญเสียข้อมูลทั้งหมดเมื่อทำการปิดคอมพิวเตอร์ไป เพราะไม่มีไฟส่งไปเลี้ยงให้อุปกรณ์สำหรับเก็บข้อมูลนั้น แต่สำหรับการอ่าน/เขียนข้อมูลในรูปแบบนี้จะใช้เวลาน้อยกว่ามากเมื่อเทียบกับการอ่าน/เขียน ข้อมูลจากหน่วยความจำแบบถาวร
การเก็บข้อมูลทั้งหน่วยความจำแบบชั่วคราว(volatile memory)และหน่วยความจำแบบถาวร(non-volatile memory)นั้นจะมีข้อดีข้อเสียแตกต่างกันไป โดยขึ้นอยู่กับบริบทที่ต้องการใช้งาน เราสามารถเลือกใช้การเก็บข้อมูลตามความเหมาะสม โดยในบทความนี้เราจะทำการพูดถึงรายละเอียดการอ่าน/เขียน ข้อมูลซึ่งถูกเก็บไว้ในรูปแบบของไฟล์ ซึ่งเป็นการเก็บข้อมูลในหน่วยความจำแบบถาวรรูปแบบหนึ่ง
-
ขั้นตอนหลักๆ ในการดำเนินการกับไฟล์
เมื่อเราจำเป็นต้องอ่าน/เขียน ข้อมูลออกมาจากไฟล์ที่บันทึกไว้ ก่อนที่จะเริ่มอ่าน/เขียนไฟล์นั้น เราจำเป็นต้องทราบตำแหน่งที่ไฟล์ดังกล่าวถูกบันทึกและชื่อไฟล์ จากนั้นจึงทำการเปิดไฟล์ขึ้นมาหรือทำการสร้างไฟล์ใหม่หากไม่มีไฟล์ดังกล่าวอยู่ แล้วจึงสามารถทำการอ่าน/เขียนข้อมูลของไฟล์ หลังจากดำเนินการกับไฟล์เสร็จสิ้น เราก็จำเป็นต้องทำการปิดไฟล์ด้วย เพื่อจะคืนทรัพยากรดังกล่าวให้กับระบบปฏิบัติการ- ทราบชื่อไฟล์และตำแหน่งที่ไฟล์ดังกล่าวถูกบันทึก
- เปิดไฟล์
- อ่าน/เขียน ไฟล์
- ปิดไฟล์
-
สร้างไฟล์ข้อมูลชนิดข้อความ(text)สำหรับการใช้งานสำหรับบทความนี้
สำหรับในบทนี้เราจะทำการอ่าน/เขียน ข้อมูลจากไฟล์ที่เป็นข้อความ ซึ่งตัวข้อมูลในไฟล์เป็นข้อมูลของอุณหภูมิสูงสุด/ต่ำสุดจากสนามบินดอนเมืองช่วงวันที่ 10-15 มิถุนายน 2562(ที่มาของข้อมูล) - สถานที่(Location): ระบุชื่อสถานที่ หรือ ชื่อจังหวัดที่ทำการเก็บข้อมูล
- วันที่(Date): ระบุวันที่ที่ทำการเก็บข้อมูล
- ภูมิภาค(Region): ระบุภูมิภาคของต่ำแหน่งที่ทำการเก็บข้อมูล
- อุณหภูมิสูงสุด(Maximum Temperature): ระบุอุณหภูมิสูงสุด(องศาเซลเซียส) ณ วันที่ที่ระบุ
- อุณหภูมิต่ำสุด(Minimum Temperature): ระบุอุณหภูมิต่ำสุด(องศาเซลเซียส) ณ วันที่ที่ระบุ
-
เริ่มต้นทำการเปิดไฟล์(open file)
เมื่อทราบตำแหน่งของไฟล์และชื่อไฟล์ที่ต้องการดำเนินการแล้วนั้น ก็สามารถดำเนินการเปิดไฟล์ดังกล่าว เพื่อใช้ในการดำเนินการต่อไป-
การเปิดไฟล์โดยใช้ฟังก์ชัน open() โดยทำการระบุเพียงชื่อไฟล์เพียงอย่างเดียว แล้วใช้ค่าตั้งตั้นในการระบุขอบเขตและการ encoding
เราสามารถใช้ฟังก์ชัน open() สำหรับทำการเปิดไฟล์ ซึ่งฟังก์ชันนี้จะคืนค่ามาเป็นออบเจ็คชนิดไฟล์ และจะใช้ออบเจคดังกล่าวในการเพิ่มหรือแก้ไขข้อมูลในไฟล์ต่อไป
ตัวอย่างการใช้งาน# -*- coding: utf-8 -*- # ใช้ฟังก์ชัน open() เพื่อทำการเปิดไฟล์โดยอ้างอิงจากตำแหน่งไฟล์ # ที่อยู่ในโฟลเดอร์ปัจจุบันที่กำลังรันคำสั่ง โดยฟังก์ชันดังกล่าวจะคืนค่า # มาเป็นออบเจ็คชนิดไฟล์และถูกเก็บไว้ในตัวแปร "source_file1" # สำหรับการเขียน/อ่าน ในลำดับต่อไป source_file1 = open("data.csv") # อ่านข้อมูลจากไฟล์ทั้งหมด data = source_file1.read() # ทำการปรินต์ค่าข้อมูลมาแสดงผล print(data) # โปรแกรมทำการปรินต์ค่า # "Location ","Date(yyyy/mm/dd)","Region","Maximum Temperature(°C) ","Minimum Temperature(°C)" # "DON MUANG AIRPORT","2019/06/10","Central Part",33.5,26.5 # "DON MUANG AIRPORT","2019/06/11","Central Part",29.8,27.8 # "DON MUANG AIRPORT","2019/06/12","Central Part",34.2,26.4 # "DON MUANG AIRPORT","2019/06/13","Central Part",34.0,27.2 # "DON MUANG AIRPORT","2019/06/14","Central Part",34.3,27.4 # "DON MUANG AIRPORT","2019/06/15","Central Part",34.9,28.2 # ใช้ฟังก์ชัน open() เพื่อทำการเปิดไฟล์โดยระบุตำแหน่งของไฟล์แบบเต็ม # ซึ่งมักจะใช้การระบุตำแหน่งแบบเต็มเมื่อไฟล์ที่ต้องการใช้งานนั้น # ไม่ได้อยู่ในตำแหน่งของโฟลเดอร์ปัจจุบัน โดยฟังก์ชันดังกล่าวจะคืนค่า # มาเป็นออบเจ็คชนิดไฟล์และถูกเก็บไว้ในตัวแปร "source_file2" # สำหรับการเขียน/อ่าน ในลำดับต่อไป source_file2 = open("c:/works/data.csv") # อ่านข้อมูลจากไฟล์ทั้งหมด data = source_file2.read() # ทำการปรินต์ค่าข้อมูลมาแสดงผล print(data) # โปรแกรมทำการปรินต์ค่า # "Location ","Date(yyyy/mm/dd)","Region","Maximum Temperature(°C) ","Minimum Temperature(°C)" # "DON MUANG AIRPORT","2019/06/10","Central Part",33.5,26.5 # "DON MUANG AIRPORT","2019/06/11","Central Part",29.8,27.8 # "DON MUANG AIRPORT","2019/06/12","Central Part",34.2,26.4 # "DON MUANG AIRPORT","2019/06/13","Central Part",34.0,27.2 # "DON MUANG AIRPORT","2019/06/14","Central Part",34.3,27.4 # "DON MUANG AIRPORT","2019/06/15","Central Part",34.9,28.2 -
การเปิดไฟล์โดยใช้ฟังก์ชัน open() โดยทำการระบุชื่อไฟล์และระบุขอบเขตการทำงานกับไฟล์ดังกล่าว
ในการใช้งานฟังก์ชัน open() เพื่อเปิดไฟล์ขึ้นมาใช้งานนั้น เรายังสามารถทำการระบุขอบเขตการใช้งาน(mode)กับไฟล์ดังกล่าวได้ โดยการระบุข้อมูลขอบเขตให้กับฟังก์ชันสำหรับการระบุขอบเขตนั้นก็เพื่อจำกัดขอบเขตของการใช้งานกับไฟล์ ว่าต้องการเปิดไฟล์เพื่ออ่านข้อมูลอย่างเดียว(‘r’), เปิดไฟล์เพื่อทำการเขียนข้อมูลใหม่(‘w’) หรือเปิดไฟล์เพื่อทำการแก้ไขข้อมูล(‘a’) เป็นต้น
สำหรับการระบุขอบเขตดังกล่าว เรายังสามารถที่จะกำหนดได้ว่าเราต้องการเปิดไฟล์ในรูปแบบข้อความ(text) หรือรูปแบบไบนารี่(binary) ซึ่งควรจะระบุให้ตรงกับชนิดข้อมูลที่ถูกบันทึกอยู่ในไฟล์ที่ต้องการใช้งาน โดยหากไม่ระบุข้อมูลนี้ ค่าตั้งต้นจะเป็นการเปิดไฟล์ในรูปแบบข้อความ(text) ซึ่งจะทำให้ข้อมูลที่ถูกอ่านจากไฟล์อยู่ในรูปแบบของข้อความ แต่หากต้องการดำเนินการกับข้อมูลจากไฟล์ในรูปแบบไบนารี่(binary) เมื่ออ่าน/เขียนข้อมูลดังกล่าวข้อมูลจะอยู่ในรูปแบบไบต์(bytes) การอ่านไฟล์ในรูปแบบนี้จะใช้ในการอ่านข้อมูลที่ถูกเก็บในรูปแบบอื่นๆ ที่ไม่ใช่ข้อความ เช่น รูปภาพ(‘.jpg’, ‘.png’, ‘.svg’, ‘.gif’)หรือไฟล์สำหรับติดตั้งโปรแกรม(‘.exe’)
ค่าที่ระบุขอบเขต
(mode)รายละเอียด
(description)‘r’ เปิดไฟล์สำหรับอ่านเพียงอย่างเดียว ‘w’ เปิดไฟล์สำหรับเขียนข้อมูลลงไป โดยหากชื่อไฟล์ที่ระบุนั้นยังไม่มีอยู่ จะทำการสร้างไฟล์ใหม่เพื่อเขียนข้อมูล แต่หากชื่อไฟล์ที่ระบุนั้นมีอยู่แล้วจะทำการลบข้อมูลเก่าออกก่อนแล้วค่อยเพิ่มข้อมูลใหม่ลงไป(truncates)ในไฟล์ดังกล่าวที่มีอยู่แล้ว ‘x’ เปิดไฟล์แบบต้องการสร้างไฟล์ใหม่เท่านั้น(exclusive creation) โดยถ้ายังไม่มีไฟล์อยู่จะทำการสร้างไฟล์ใหม่เพื่อบันทึกข้อมูล แต่ถ้ามีไฟล์ชื่อดังกล่าวอยู่แล้วจะเกิดข้อผิดพลาดขึ้น ‘a’ เปิดไฟล์แบบต้องการแก้ไขเพิ่มเติมจากข้อมูลเดิม(append) โดยทำการเพิ่มข้อมูลใหม่ต่อเข้าไปหลังข้อมูลสุดท้ายโดยไม่ต้องทำการลบข้อมูลออก(truncating) และจะสร้างไฟล์ใหม่ให้อัตโนมัติ หากยังไม่มีชื่อไฟล์ดังกล่าวอยู่ ‘t’ เปิดไฟล์เพื่อใช้งานข้อมูลในรูปแบบข้อความ(text) และเป็นค่าที่ถูกกำหนดเป็นค่าตั้งต้นหากไม่ทำการระบุ ‘b’ เปิดไฟล์เพื่อใช้งานข้อมูลในรูปแบบไบนารี่(binary) เพื่ออ่านข้อมูลเช่นรูปภาพ, วิดีโอ, ไฟล์เพลง หรือไฟล์สำหรับติดตั้งต่างๆ ‘+’ เปิดไฟล์เพื่อใช้งานในกรณีต้องการเปลี่ยนแปลงข้อมูล อ่าน/เขียน ตัวอย่างการใช้งาน การอ่านไฟล์ในรูปแบบข้อความ(text)โดยไม่ทำการระบุขอบเขตการใช้งาน ซึ่งจะใช้ค่าตั้งต้นเป็น ‘rt’ โดยสามารถอ่านข้อมูลได้เพียงอย่างเดียว
# -*- coding: utf-8 -*- # ใช้ฟังก์ชัน open() เพื่อทำการเปิดไฟล์โดยอ้างอิงจากตำแหน่ง # ไฟล์ที่อยู่ในโฟลเดอร์ปัจจุบันและไม่ทำการระบุขอบเขตการใช้งานไฟล์ # สำหรับค่าตั้งต้นจะเป็น 'r', 'rt' คือทำการอ่านข้อมูลเท่านั้น # โดยฟังก์ชันดังกล่าวจะคืนค่ามาเป็นออบเจ็คชนิดไฟล์และถูกเก็บไว้ # ในตัวแปร "source_file" สำหรับการเขียน/อ่าน ในลำดับต่อไป source_file = open("data.csv") data = source_file.read() print(data) # โปรแกรมทำการปรินต์ค่า # "Location ","Date(yyyy/mm/dd)","Region","Maximum Temperature(°C) ","Minimum Temperature(°C)" # "DON MUANG AIRPORT","2019/06/10","Central Part",33.5,26.5 # "DON MUANG AIRPORT","2019/06/11","Central Part",29.8,27.8 # "DON MUANG AIRPORT","2019/06/12","Central Part",34.2,26.4 # "DON MUANG AIRPORT","2019/06/13","Central Part",34.0,27.2 # "DON MUANG AIRPORT","2019/06/14","Central Part",34.3,27.4 # "DON MUANG AIRPORT","2019/06/15","Central Part",34.9,28.2ตัวอย่างการใช้งาน การอ่านไฟล์ในรูปแบบข้อความ(text)โดยระบุขอบเขต ‘w’ ซึ่งสามารถทำการเขียนข้อมูลใหม่ลงไปในไฟล์
# -*- coding: utf-8 -*- # ใช้ฟังก์ชัน open() เพื่อทำการเปิดไฟล์โดยอ้างอิงจากตำแหน่งไฟล์ # ที่อยู่ในโฟลเดอร์ปัจจุบันและทำการระบุขอบเขตการใช้งานไฟล์เป็น 'w' # คือสามารถอ่านและเขียนข้อมูลดังกล่าวในรูปแบบข้อความ โดยฟังก์ชันดังกล่าว # จะคืนค่ามาเป็นออบเจ็คชนิดไฟล์และถูกเก็บไว้ในตัวแปร "source_file" # สำหรับการเขียน/อ่าน ในลำดับต่อไป example_file = open("example.csv", "w") # ทำการอ่านข้อมูลทั้งหมดจากไฟล์ data = example_file.read() # ทำการปรินต์ค่าข้อมูลออกมาแสดงผล print(data) # โปรแกรมทำการปรินต์ค่า # "Location ","Date(yyyy/mm/dd)","Region","Maximum Temperature(°C) ","Minimum Temperature(°C)" # "DON MUANG AIRPORT","2019/06/10","Central Part",33.5,26.5 # "DON MUANG AIRPORT","2019/06/11","Central Part",29.8,27.8 # "DON MUANG AIRPORT","2019/06/12","Central Part",34.2,26.4 # "DON MUANG AIRPORT","2019/06/13","Central Part",34.0,27.2 # "DON MUANG AIRPORT","2019/06/14","Central Part",34.3,27.4 # "DON MUANG AIRPORT","2019/06/15","Central Part",34.9,28.2ตัวอย่างการใช้งาน การอ่านไฟล์ในรูปแบบไบนารี่(binary)โดยทำการระบุขอบเขต ‘rb’ ซึ่งสามารถอ่านข้อมูลรูปแบบไบนารี่จากไฟล์ได้
# -*- coding: utf-8 -*- # ใช้ฟังก์ชัน open() เพื่อทำการเปิดไฟล์โดยอ้างอิงจากตำแหน่งไฟล์ # ที่อยู่ในโฟลเดอร์ปัจจุบันและทำการระบุขอบเขตการใช้งานไฟล์เป็น 'r+b' # ซึ่งทำให้สามารถอ่านข้อมูลจากไฟล์ในรูปแบบ binary # โดยฟังก์ชันดังกล่าวจะคืนค่ามาเป็นออบเจ็คชนิดไฟล์และถูกเก็บไว้ # ในตัวแปร "image_file" สำหรับการอ่านข้อมูลในลำดับต่อไป image_file = open("graph_image.png", 'rb') # ทำการอ่านข้อมูลไบนารี่จากไฟล์รูปภาพ f = image_file.read() # ทำการแปลงข้อมูลให้อยู่ในรูปไบต์ของข้อมูล b = bytearray(f) # ทำการปรินต์ค่าข้อมูลเพื่อแสดงผลสำหรับข้อมูล 10 ไบต์แรกของรูปภาพ print(b[0:10]) # โปรแกรมทำการปรินต์ค่า # bytearray(b'\x89PNG\r\n\x1a\n\x00\x00') -
การเปิดไฟล์โดยใช้ฟังก์ชัน open() ซึ่งทำการระบุเพียงชื่อไฟล์และ encoding สำหรับไฟล์ดังกล่าว
ในการอ่านข้อมูลชนิดข้อความ(text) นั้นการระบุ encoding ก็ช่วยให้สามารถอ่านข้อมูลที่อาจจะถูกบันทึกมาในภาษาที่แตกต่างกันนั้นมีความถูกต้องตามข้อมูลจากต้นฉบับ โดยหากไม่ทำการระบุวิธีการ encoding นี้ โปรแกรมก็จะใช้ค่าตั้งต้นที่กำหนดไว้แล้วจากระบบปฏิบัติการที่ใช้ประมวลผลโปรแกรมดังกล่าวอยู่ ซึ่งอาจจะมีค่าตั้งต้นแตกต่างกันไปตามระบบปฏิบัติการที่ใช้รันคำสั่งนั้นๆ
ตัวอย่างการใช้งาน# -*- coding: utf-8 -*- # ใช้ฟังก์ชัน open() เพื่อทำการเปิดไฟล์โดยอ้างอิงจากตำแหน่งไฟล์ # ที่อยู่ในโฟลเดอร์ปัจจุบันและไม่ทำการระบุขอบเขตการใช้งานไฟล์ # ซึ่งค่าตั้งต้นจะเป็น 'r', 'rt' คือทำการอ่านข้อมูลเท่านั้น # โดยฟังก์ชันดังกล่าวจะคืนค่ามาเป็นออบเจ็คชนิดไฟล์และถูกเก็บไว้ใน # ตัวแปร "source_file" สำหรับการเขียน/อ่าน ในลำดับต่อไป source_file = open("data.csv", encoding='utf-8') # ทำการอ่านข้อมูลจากไฟล์โดยระบุการ encoding โดยใช้ utf-8 data = source_file.readline() # ทำการปรินต์ค่าข้อมูลเพื่อทำการแสดงผล print(data) # โปรแกรมทำการปรินต์ค่า # "Location ","Date(yyyy/mm/dd)","Region","Maximum Temperature(°C) ","Minimum Temperature(°C)"
-
การเปิดไฟล์โดยใช้ฟังก์ชัน open() โดยทำการระบุเพียงชื่อไฟล์เพียงอย่างเดียว แล้วใช้ค่าตั้งตั้นในการระบุขอบเขตและการ encoding
-
ทำการปิดไฟล์
เมื่อเราดำเนินการกับไฟล์ที่เรียกใช้เสร็จแล้ว เราก็ควรจะปิดไฟล์ดังกล่าวด้วยวิธีที่ถูกต้องด้วย เพื่อจะได้ทำการคืนทรัพยากรที่เรียกใช้ระหว่างเปิดไฟล์ขึ้นมานั้น ส่งคืนกลับไปให้กับระบบปฏิบัติการ โดยเรียกใช้โดยใช้ฟังก์ชัน close() สำหรับปิดไฟล์สำหรับ python เองนั้น โดยปกติแล้วจะมีระบบจัดการทรัพยากร(garbage collector) เพื่อใช้ทำการจัดการกับออบเจ็คที่ไม่ถูกเรียกใช้งาน แล้วจัดการคืนทรัพยากรเหล่านั้นให้กับระบบปฏิบัติการเช่นกัน แต่ระบบดังกล่าวจะทำการเมื่อถึงช่วงเวลาที่กำหนด ดังนั้นการเรียกใช้ฟังก์ชันเพื่อปิดไฟล์ก็จะช่วยทำให้มั่นใจว่า เมื่อเราได้เลิกใช้ไฟล์ดังกล่าวแล้วจะคืนทรัพยากรส่วนนั้นทันที เพื่อให้ระบบในส่วนอื่นสามารถนำทรัพยาการนั้นไปใช้ได้ทันที
ตัวอย่างการใช้งาน
# -*- coding: utf-8 -*- # ใช้ฟังก์ชัน open() เพื่อทำการเปิดไฟล์โดยอ้างอิงจากตำแหน่งไฟล์ # ที่อยู่ในโฟลเดอร์ปัจจุบันและไม่ทำการระบุขอบเขตการใช้งานไฟล์ # โดยค่าตั้งต้นจะเป็น 'r', 'rt' คือทำการอ่านข้อมูลเท่านั้น # และทำการระบุ encoding ให้ข้อมูลที่อ่านมาใช้งานในรูปแบบ utf-8 # โดยฟังก์ชันดังกล่าวจะคืนค่ามาเป็นออบเจ็คชนิดไฟล์และถูกเก็บไว้ # ในตัวแปร "source_file" สำหรับการเขียน/อ่าน ในลำดับต่อไป source_file = open("data.csv", encoding='utf-8'); # ทำการอ่านข้อมูลจากไฟล์โดยระบุการ encoding โดยใช้ utf-8 data = source_file.readline() # ทำการปรินต์ค่าข้อมูลเพื่อทำการแสดงผล print(data) # โปรแกรมทำการปรินต์ค่า # "Location ","Date(yyyy/mm/dd)","Region","Maximum Temperature(°C) ","Minimum Temperature(°C)" # ใช้งานฟังก์ชัน close() เพื่อทำการปิดไฟล์ที่เรียกใช้งานเพื่อคืนทรัพยากรในส่วนดังกล่าวให้ระบบทันที source_file.close() -
การเปิดไฟล์ขึ้นมาใช้งานโดยมี try…finally… กำกับเพื่อช่วยตรวจสอบข้อผิดพลาดที่เกิดขึ้น
ในการดำเนินการกับไฟล์นั้นอาจมีข้อผิดพลาดเกิดขึ้นได้ระหว่างการดำเนินการ เปิด/เขียน/อ่าน ไฟล์ และเมื่อเกิดข้อผิดพลาดขึ้น แม้จะมีการเขียนคำสั่งปิดไฟล์เพื่อคืนทรัพยากรแล้ว แต่คำสั่งดังกล่าวอาจจะไม่ถูกเรียกใช้งาน เนื่องจากโปรแกรมจะหยุดการทำงานทันทีเพราะเกิดข้อผิดพลาด ทำให้ไม่มีการคืนทรัพยากรให้กับระบบอย่างถูกต้องการกำกับด้วย try…finally… นั้น หากเขียนชุดคำสั่งอยู่ภายในบล๊อกของ try… แล้วเกิดข้อผิดพลาดขึ้นระหว่างดำเนินการ โปรแกรมจะยุติการดำเนินการเพียงชุดคำสั่งที่อยู่ในบล๊อกดังกล่าวหมด แล้วไปดำเนินการชุดคำสั่งในบล๊อก finally… และชุดคำสั่งอื่นๆ หลังจากนั้นได้ตามปกติ ดังนั้นการใช้งาน try…finally… สามารถเข้ามาช่วยดักจับข้อผิดพลาด และเขียนคำสั่งเพื่อทำการปิดไฟล์ดังกล่าวได้ถูกต้องแม้จะเกิดข้อผิดพลาดขึ้น
ตัวอย่างการใช้งาน# -*- coding: utf-8 -*- # ใช้ฟังก์ชัน open() เพื่อทำการเปิดไฟล์โดยอ้างอิงจากตำแหน่งไฟล์ # ที่อยู่ในโฟลเดอร์ปัจจุบันและทำการระบุขอบเขตการใช้งานไฟล์ # เป็น 'w' ซึ่งจะทำให้สามารถเขียนข้อมูลใหม่ลงไฟล์ที่ระบุได้ # และทำการระบุ encoding ให้ข้อมูลที่อ่านมาใช้งานในรูปแบบ utf-8 # โดยฟังก์ชันดังกล่าวจะคืนค่ามาเป็นออบเจ็คชนิดไฟล์และถูกเก็บไว้ # ในตัวแปร "example_file" สำหรับการเขียน/อ่าน ในลำดับต่อไป example_file = open("example.csv", 'w', encoding='utf-8') # ดักจับข้อผิดพลาดโดยใช้ try...finally... try: # ทำการเขียนข้อมูลลงไฟล์ด้วยฟังก์ชัน write() example_file.write("'DON MUANG AIRPORT','2019/06/10','Central Part',33.5,26.5\n"); finally: # ทำการปิดไฟล์หลังใช้งานเสร็จสิ้น เพื่อคืนทรัพยากรให้ระบบ example_file.close()จากตัวอย่าง มีการใช้ try…finally… ในการตรวจสอบข้อผิดพลาดในระหว่างเปิดไฟล์และเขียนไฟล์ โดยหากมีข้อผิดพลาดเกิดขึ้นในระหว่างขั้นตอนดังกล่าว เราสามารถมั่นใจได้ว่าโปรแกรมจะรันคำสั่ง close() เพื่อปิดไฟล์ ตามคำสั่งที่อยู่ใน finally เพื่อปิดไฟล์และคืนทรัพยากรให้กับระบบ
-
การใช้ with open() เพื่อทำการเปิดไฟล์ โดยเมื่อใช้งานเสร็จจะมีการปิดไฟล์ให้อัตโนมัติโดยไม่ต้องเขียนคำสั่งเพิ่มเติม
สำหรับการเปิดไฟล์เพื่อใช้งานใน python เรายังสามารถใช้คีย์เวิร์ด with ร่วมด้วย ในการเปิดใช้งานไฟล์ด้วยฟังก์ชัน open() ที่ได้พูดถึงไปข้างต้นแล้วนั้น โดยการกำกับด้วยคีย์เวิร์ด with นั้นเพื่อจะให้มั่นใจว่าทุกครั้งที่เปิดไฟล์ด้วยคำสั่ง open() หลังจากโปรแกรมสิ้นสุดการดำเนินการของชุดคำสั่งที่อยู่ภายในบล๊อกดังกล่าวแล้ว จะทำการปิดไฟล์ให้เพื่อคืนทรัพยาการด้วยทันที โดยไม่ต้องเขียนคำสั่งเพื่อเรียกใช้ฟังก์ชัน close() เพิ่มเติม
ตัวอย่างการใช้งาน# -*- coding: utf-8 -*- # ใช้งานคีย์เวิร์ด with ร่วมกับฟังก์ชัน open() เพื่อทำการเปิดใช้งานไฟล์ที่ระบุ # ที่อยู่ในโฟลเดอร์ปัจจุบันและทำการระบุขอบเขตการใช้งานไฟล์ # เป็น 'r' ซึ่งจะทำให้เพียงแค่สามารถอ่านข้อมูลจากไฟล์ที่ระบุได้ # และทำการระบุ encoding ให้ข้อมูลที่อ่านมาใช้งานในรูปแบบ utf-8 # โดยฟังก์ชันดังกล่าวจะคืนค่ามาเป็นออบเจ็คชนิดไฟล์และถูกเก็บไว้ # ในตัวแปร "source_file" สำหรับการอ่านข้อมูล ในลำดับต่อไป # สำหรับการเขียน/อ่าน ในลำดับต่อไป with open("data.csv", 'r', encoding='utf-8') as source_file: # ทำการอ่านข้อมูลจากไฟล์โดยระบุการ encoding โดยใช้ utf-8 data = source_file.readline() # ทำการปรินต์ค่าข้อมูลเพื่อทำการแสดงผล โดยระบุให้ไม่ต้องใส่ # อักขระพิเศษสำหรับขึ้นบรรทัดใหม่ "\n" เพิ่มเติมอีก print(data, end="") # โปรแกรมทำการปรินต์ค่า # "Location ","Date(yyyy/mm/dd)","Region","Maximum Temperature(°C) ","Minimum Temperature(°C)" -
การเขียนข้อมูลลงไฟล์
หากต้องการเปิดไฟล์เพื่อทำการเพิ่มหรือแก้ไขข้อมูลลงไปในไฟล์นั้น ดังที่กล่าวไว้ในตอนต้นเกี่ยวกับการเปิดไฟล์ต้องระบุขอบเขต(mode)ของการใช้งานข้อมูล ที่อนุญาติให้สามารถแก้ไขข้อมูลดังกล่าว เช่น- ‘w’: ในการเปิดไฟล์เพื่อแก้ไขข้อมูล โดยเริ่มต้นจากการลบข้อมูลเดิมออกก่อนทั้งหมดแล้วจึงเขียนข้อมูลใหม่ลงไป(truncate) และจะทำการสร้างไฟล์ใหม่ขึ้นอัตโนมัติหากไม่มีชื่อไฟล์ดังกล่าวอยู่
ตัวอย่างการใช้งาน# -*- coding: utf-8 -*- # ใช้งานคีย์เวิร์ด with ร่วมกับฟังก์ชัน open() เพื่อทำการเปิดไฟล์ # โดยอ้างอิงจากตำแหน่งไฟล์ที่อยู่ในโฟลเดอร์ปัจจุบันและทำการระบุขอบเขตการใช้งานไฟล์ # เป็น 'w' ซึ่งจทำให้สามารถเขียนข้อมูลใหม่ลงไฟล์ที่ระบุได้ # และทำการระบุ encoding ให้ข้อมูลที่อ่านมาใช้งานในรูปแบบ utf-8 # โดยฟังก์ชันดังกล่าวจะคืนค่ามาเป็นออบเจ็คชนิดไฟล์และถูกเก็บไว้ # ในตัวแปร "example_file" สำหรับการเขียน/อ่าน ในลำดับต่อไป with open("example.csv", 'w', encoding='utf-8') as example_file: example_file.write("'DON MUANG AIRPORT','2019/06/10','Central Part',33.5,26.5\n"); example_file.write("'DON MUANG AIRPORT','2019/06/11','Central Part',29.8,27.8\n");จากตัวอย่างโปรแกรมจะสร้างไฟล์ใหม่ชื่อ “example.csv” หากไม่มีไฟล์ชื่อดังกล่าวอยู่ แต่ถ้ามีไฟล์นั้นอยู่แล้วจะเขียนข้อมูลทับข้อมูลเดิมทั้งหมด และสำหรับข้อมูลแต่ละบรรทัดเรายังระบุอักขระพิเศษ \n สำหรับขึ้นบรรทัดใหม่เข้าไป เพื่อจะให้ข้อมูลในไฟล์ทำการแยกกันในแต่ละบรรทัดด้วย
- ‘a’: ในการเปิดไฟล์เพื่อแก้ไขข้อมูล โดยเพิ่มข้อมูลต่อจากข้อมูลสุดท้ายที่มีอยู่(append) และจะทำการสร้างไฟล์ใหม่ขึ้นอัติโนมัติหากไม่มีชื่อไฟล์ดังกล่าวอยู่
ตัวอย่างการใช้งาน# -*- coding: utf-8 -*- # ใช้งานคีย์เวิร์ด with ร่วมกับฟังก์ชัน open() เพื่อทำการเปิดไฟล์ # โดยอ้างอิงจากตำแหน่งไฟล์ที่อยู่ในโฟลเดอร์ปัจจุบันและทำการระบุขอบเขตการใช้งานไฟล์ # เป็น 'a' ซึ่งจทำให้สามารถเพิ่มข้อมูลต่อจากข้อมูลเดิมลงไฟล์ที่ระบุได้ # และทำการระบุ encoding ให้ข้อมูลที่อ่านมาใช้งานในรูปแบบ utf-8 # โดยฟังก์ชันดังกล่าวจะคืนค่ามาเป็นออบเจ็คชนิดไฟล์และถูกเก็บไว้ # ในตัวแปร "source_file" สำหรับการเขียน/อ่าน ในลำดับต่อไป with open("data.csv", 'a', encoding='utf-8') as source_file: # ทำการเพิ่มข้อมูลลงไฟล์ด้วยฟังก์ชัน write() source_file.write("'DON MUANG AIRPORT','2019/06/16','Central Part',33.8,26.6\n");จากตัวอย่างโปรแกรมจะสร้างไฟล์ใหม่ชื่อ data.txt หากไม่มีไฟล์ชื่อดังกล่าวอยู่ แต่ถ้ามีไฟล์นั้นอยู่แล้วจะเพิ่มข้อมูลใหม่เข้าไปต่อท้ายข้อมูลเดิม และเรายังตั้งระบุอักขระพิเศษ \n สำหรับขึ้นบรรทัดใหม่เข้าไปเพื่อจะให้ข้อมูลในไฟล์แยกกันในแต่ละบรรทัดด้วย
- ‘x’: ในการเปิดไฟล์เพื่อแก้ไขข้อมูล โดยต้องการเขียนข้อมูลพร้อมทั้งสร้างไฟล์ใหม่เท่านั้น โดยหากมีชื่อไฟล์ดังกล่าวอยู่แล้วจะเกิดข้อผิดพลาด(exclusive creation)
ตัวอย่างการใช้งาน# -*- coding: utf-8 -*- # ใช้งานคีย์เวิร์ด with ร่วมกับฟังก์ชัน open() เพื่อทำการเปิดไฟล์ # โดยอ้างอิงจากตำแหน่งไฟล์ที่อยู่ในโฟลเดอร์ปัจจุบันและทำการระบุขอบเขตการใช้งานไฟล์ # เป็น 'x' ซึ่งจะทำให้สามารถอ่านและเพิ่มข้อมูลต่อจากข้อมูลเดิมลงไฟล์ที่ระบุได้ # และทำการระบุ encoding ให้ข้อมูลที่อ่านมาใช้งานในรูปแบบ utf-8 # โดยฟังก์ชันดังกล่าวจะคืนค่ามาเป็นออบเจ็คชนิดไฟล์และถูกเก็บไว้ # ในตัวแปร "source_file" สำหรับการเขียน/อ่าน ในลำดับต่อไป with open("data.csv", 'x', encoding='utf-8') as source_file: # ทำการเพิ่มข้อมูลลงไฟล์ด้วยฟังก์ชัน write() source_file.write("'DON MUANG AIRPORT','2019/06/16','Central Part',33.8,26.6\n");จากตัวอย่างโปรแกรมจะสร้างไฟล์ใหม่ชื่อ “data.csv” หากไม่มีไฟล์ชื่อดังกล่าวอยู่และทำการเพิ่มข้อมูลที่กำหนดลงไป แต่ถ้ามีไฟล์นั้นอยู่แล้วจะเกิดข้อผิดพลาด
- ‘w’: ในการเปิดไฟล์เพื่อแก้ไขข้อมูล โดยเริ่มต้นจากการลบข้อมูลเดิมออกก่อนทั้งหมดแล้วจึงเขียนข้อมูลใหม่ลงไป(truncate) และจะทำการสร้างไฟล์ใหม่ขึ้นอัตโนมัติหากไม่มีชื่อไฟล์ดังกล่าวอยู่
-
การอ่านข้อมูลจากไฟล์
หากเราเปิดไฟล์เพื่อต้องการเพียงแค่อ่านข้อมูล เราก็ควรระบุขอบเขตสำหรับการอ่านเท่านั้น ‘r’ การกำหนดขอบเขตดังกล่าวช่วยป้องกันการผิดพลาดที่อาจเกิดขึ้นจากการเขียนคำสั่งผิดพลาดได้ด้วย
ตัวอย่างการใช้งาน# -*- coding: utf-8 -*- # ใช้งานคีย์เวิร์ด with ร่วมกับฟังก์ชัน open() เพื่อทำการเปิดไฟล์ # โดยอ้างอิงจากตำแหน่งไฟล์ที่อยู่ในโฟลเดอร์ปัจจุบันและทำการระบุขอบเขตการใช้งานไฟล์ # เป็น 'r' ซึ่งจะทำให้สามารถเพียงอ่านข้อมูลจากไฟล์ที่ระบุได้เท่านั้น # และทำการระบุ encoding ให้ข้อมูลที่อ่านมาใช้งานในรูปแบบ utf-8 # โดยฟังก์ชันดังกล่าวจะคืนค่ามาเป็นออบเจ็คชนิดไฟล์และถูกเก็บไว้ # ในตัวแปร "source_file" สำหรับการเขียน/อ่าน ในลำดับต่อไป with open("data.csv", 'r', encoding='utf-8') as source_file: # ทำการอ่านข้อมูลทั้งหมดจากไฟล์ด้วยฟังก์ชัน read() data = source_file.read() # ทำการปรินท์ค่าข้อมูลออกมาแสดงผล print( data ) # โปรแกรมทำการปรินต์ค่า # "Location ","Date(yyyy/mm/dd)","Region","Maximum Temperature(°C) ","Minimum Temperature(°C)" # "DON MUANG AIRPORT","2019/06/10","Central Part",33.5,26.5 # "DON MUANG AIRPORT","2019/06/11","Central Part",29.8,27.8 # "DON MUANG AIRPORT","2019/06/12","Central Part",34.2,26.4 # "DON MUANG AIRPORT","2019/06/13","Central Part",34.0,27.2 # "DON MUANG AIRPORT","2019/06/14","Central Part",34.3,27.4 # "DON MUANG AIRPORT","2019/06/15","Central Part",34.9,28.2 # 'DON MUANG AIRPORT','2019/06/16','Central Part',33.8,26.6- การอ่านข้อมูลจากไฟล์โดยใช้ฟังก์ชัน read()
การอ่านข้อมูลจากไฟล์มีฟังก์ชันให้เลือกใช้งานหลายฟังก์ชัน เช่น ฟังก์ชัน read(size) ซึ่งฟังก์ชันดังกล่าวใช้สำหรับอ่านข้อมูลออกมาเป็นจำนวนข้อมูลตามที่ระบุลงไป และเมื่ออ่านข้อมูลไปถึงตำแหน่งใด ตัวชี้ตำแหน่งข้อมูลก็จะย้ายตามข้อมูลที่ถูกอ่านไปแล้วด้วย แต่หากไม่มีการระบุจำนวนข้อมูลก็จะทำการอ่านข้อมูลทั้งหมด เริ่มตั้งแต่ตำแหน่งที่ตัวชี้ตำแหน่งอยู่ในปัจจุบันไปจนจบไฟล์
ตัวอย่างการใช้งาน# -*- coding: utf-8 -*- # ใช้งานคีย์เวิร์ด with ร่วมกับฟังก์ชัน open() เพื่อทำการเปิดไฟล์ # โดยอ้างอิงจากตำแหน่งไฟล์ที่อยู่ในโฟลเดอร์ปัจจุบันและทำการระบุขอบเขต # การใช้งานไฟล์เป็น 'r' ซึ่งจะทำให้สามารถเพียงแค่อ่านข้อมูลจากไฟล์ที่ระบุได้ # และทำการระบุ encoding ให้ข้อมูลที่อ่านมาใช้งานในรูปแบบ utf-8 # โดยฟังก์ชันดังกล่าวจะคืนค่ามาเป็นออบเจ็คชนิดไฟล์และถูกเก็บไว้ # ในตัวแปร "source_file" สำหรับการเขียน/อ่าน ในลำดับต่อไป with open("data.csv", 'r', encoding='utf-8') as source_file: # ทำการอ่านข้อมูล 12 ตัวแรก จากไฟล์ data = source_file.read(12) # ทำการปรินต์ค่าข้อมูลออกมาแสดงผล print(data) # โปรแกรมทำการปรินต์ค่า # "Location ", # ทำการอ่านข้อมูลจากไฟล์ 19 ตัว ถัดมาจาก 12 ตัวที่ดึงข้อมูลมาแล้ว data = source_file.read(19) # ทำการปรินต์ค่าข้อมูลออกมาแสดงผล print(data) # โปรแกรมทำการปรินต์ค่า # "Date(yyyy/mm/dd)", # ทำการอ่านข้อมูลจากไฟล์ จากตำแหน่งตัวชี้ข้อมูลปัจจุบันไปจนจบไฟล์ data = source_file.read() # ทำการปรินต์ค่าข้อมูลออกมาแสดงผล print(data) # โปรแกรมทำการปรินต์ค่า # "Region","Maximum Temperature(°C) ","Minimum Temperature(°C)" # "DON MUANG AIRPORT","2019/06/10","Central Part",33.5,26.5 # "DON MUANG AIRPORT","2019/06/11","Central Part",29.8,27.8 # "DON MUANG AIRPORT","2019/06/12","Central Part",34.2,26.4 # "DON MUANG AIRPORT","2019/06/13","Central Part",34.0,27.2 # "DON MUANG AIRPORT","2019/06/14","Central Part",34.3,27.4 # "DON MUANG AIRPORT","2019/06/15","Central Part",34.9,28.2 # "DON MUANG AIRPORT","2019/06/16","Central Part",33.8,26.6 # เนื่องจากคำสั่งก่อนหน้า ได้อ่านข้อมูลไปจนจบไฟล์แล้ว โดยหากรันคำสั่ง # สำหรับอ่านข้อมูลนี้อีกจะทำให้ข้อมูลที่ได้จะเป็นค่าว่าง เพราะตำแหน่งของ # ตัวชี้ข้อมูลนั้นอยู่ตรงจุดสิ้นสุดไฟล์แล้ว # ได้ถูกอ่านออกไปหมดแล้ว data = source_file.read() # ทำการปรินต์ค่าข้อมูลออกมาแสดงผล print(data) # โปรแกรมทำการปรินต์ค่า #จากตัวอย่างข้างต้น เราจะเห็นว่าเมื่อเราทำการอ่านข้อมูลโดยฟังก์ชัน read() และระบุจำนวนข้อมูลลงไป ข้อมูลจะถูกอ่านจากไฟล์ตามจำนวนที่ระบุและเมื่ออ่านข้อมูลดังกล่าวแล้ว ตัวชี้ตำแหน่งข้อมูลก็จะเลื่อนไปชี้ที่ตำแหน่งสุดท้ายที่เราทำการอ่านข้อมูลไปถึง และเลื่อนไปเรื่อยๆ ตามจำนวนข้อมูลที่ถูกอ่านออกไป
-
การกำหนดตำแหน่งที่เริ่มอ่านข้อมูลจากไฟล์โดยใช้ฟังก์ชัน seek()
เราสามารถที่จะทำการเปลี่ยนตำแหน่งของตัวชี้ข้อมูลเองจากที่หนึ่งไปอีกที่หนึ่งได้ โดยใช้ฟังก์ชัน seek() เพื่อย้ายตำแหน่งตัวชี้ข้อมูลและยังสามารถใช้ร่วมกับฟังก์ชัน tell() ไว้สำหรับบอกตำแหน่งปัจจุบันที่ตัวชี้ข้อมูลอ้างอิงอยู่(จำนวนเป็นไบต์)
ตัวอย่างการใช้งาน# -*- coding: utf-8 -*- # ใช้งานคีย์เวิร์ด with ร่วมกับฟังก์ชัน open() เพื่อทำการเปิดไฟล์ # โดยอ้างอิงจากตำแหน่งไฟล์ที่อยู่ในโฟลเดอร์ปัจจุบันและทำการระบุขอบเขต # การใช้งานไฟล์เป็น 'r' ซึ่งจะทำให้สามารถเพียงอ่านข้อมูลจากไฟล์ที่ระบุได้ # และทำการระบุ encoding ให้ข้อมูลที่อ่านมาใช้งานในรูปแบบ utf-8 # โดยฟังก์ชันดังกล่าวจะคืนค่ามาเป็นออบเจ็คชนิดไฟล์และถูกเก็บไว้ # ในตัวแปร "source_file" สำหรับการเขียน/อ่าน ในลำดับต่อไป with open("data.csv", 'r', encoding='utf-8') as source_file: # ทำการอ่านข้อมูล 12 ตัวแรก จากไฟล์ data = source_file.read(12) # อ่านข้อมูล 12 ตัวแรก # ทำการปรินต์ค่าข้อมูลออกมาแสดงผล print(data) # โปรแกรมทำการปรินต์ค่า # "Location ", # ทำการปรินต์ค่าข้อมูลตำแหน่งที่ตัวชี้ข้อมูลปัจจุบันอ้างอิงอยู่ position = source_file.tell() # ทำการปรินต์ค่าข้อมูลตำแหน่งของตัวชี้ข้อมูลออกมาแสดงผล print(position) # โปรแกรมทำการปรินต์ค่า # 12 # ทำการย้ายตำแหน่งอ้างอิงข้องตัวชี้ข้อมูลปัจจุบันไปยังตำแหน่งที่ระบุ ในตัวอย่างนี้ก็คือย้ายไปตรงจุดเริ่มต้นของไฟล์ source_file.seek(0) # ทำการปรินต์ค่าข้อมูลตำแหน่งที่ตัวชี้ข้อมูลปัจจุบันอ้างอิงอยู่ position = source_file.tell() # ทำการปรินต์ค่าข้อมูลตำแหน่งของตัวชี้ข้อมูลออกมาแสดงผล print(position) # โปรแกรมทำการปรินต์ค่า # 0 # ทำการอ่านข้อมูลทั้งหมดจนจบไฟล์ โดยเริ่มตั้งแต่ตำแหน่งที่ตัวชี้ข้อมูลปัจจุบันอ้างอิงอยู่ ในตัวอย่างนี้คือจากข้อมูลเริ่มต้นของไฟล์และอ่านไปจนจบไฟล์ data = source_file.read() # ทำการปรินต์ค่าข้อมูลออกมาแสดงผล print(data) # โปรแกรมทำการปรินต์ค่า # "Location ","Date(yyyy/mm/dd)","Region","Maximum Temperature(°C) ","Minimum Temperature(°C)" # "DON MUANG AIRPORT","2019/06/10","Central Part",33.5,26.5 # "DON MUANG AIRPORT","2019/06/11","Central Part",29.8,27.8 # "DON MUANG AIRPORT","2019/06/12","Central Part",34.2,26.4 # "DON MUANG AIRPORT","2019/06/13","Central Part",34.0,27.2 # "DON MUANG AIRPORT","2019/06/14","Central Part",34.3,27.4 # "DON MUANG AIRPORT","2019/06/15","Central Part",34.9,28.2 # "DON MUANG AIRPORT","2019/06/16","Central Part",33.8,26.6 - การอ่านข้อมูลออกจากไฟล์บรรทัดต่อบรรทัดโดยใช้ for…loop
เราสามารถที่จะอ่านข้อมูลออกมาบรรทัดต่อบรรทัดโดยใช้ for…loop ซึ่งเป็นวิธีที่เร็วและมีประสิทธิภาพวิธีหนึ่ง
ตัวอย่างการใช้งาน# -*- coding: utf-8 -*- # ใช้งานคีย์เวิร์ด with ร่วมกับฟังก์ชัน open() เพื่อทำการเปิดไฟล์ # โดยอ้างอิงจากตำแหน่งไฟล์ที่อยู่ในโฟลเดอร์ปัจจุบันและทำการระบุขอบเขต # การใช้งานไฟล์เป็น 'r' ซึ่งจะทำให้สามารถเพียงอ่านข้อมูลจากไฟล์ที่ระบุได้ # และทำการระบุ encoding ให้ข้อมูลที่อ่านมาใช้งานในรูปแบบ utf-8 # โดยฟังก์ชันดังกล่าวจะคืนค่ามาเป็นออบเจ็คชนิดไฟล์และถูกเก็บไว้ # ในตัวแปร "source_file" สำหรับการเขียน/อ่าน ในลำดับต่อไป with open("data.csv", 'r', encoding='utf-8') as source_file: for line in source_file: # ทำการปรินต์ค่าข้อมูลออกมาแสดงผลโดยมีการกำหนดให้ # เมื่อจบข้อความไม่ต้องเพิ่มอักขระพิเศษ "\n" ซึ่งเป็นค่าตั้งต้นออกมาด้วย print(line, end=''); # โปรแกรมทำการปรินต์ค่า # "Location ","Date(yyyy/mm/dd)","Region","Maximum Temperature(°C) ","Minimum Temperature(°C)" # "DON MUANG AIRPORT","2019/06/10","Central Part",33.5,26.5 # "DON MUANG AIRPORT","2019/06/11","Central Part",29.8,27.8 # "DON MUANG AIRPORT","2019/06/12","Central Part",34.2,26.4 # "DON MUANG AIRPORT","2019/06/13","Central Part",34.0,27.2 # "DON MUANG AIRPORT","2019/06/14","Central Part",34.3,27.4 # "DON MUANG AIRPORT","2019/06/15","Central Part",34.9,28.2 # "DON MUANG AIRPORT","2019/06/16","Central Part",33.8,26.6จากตัวอย่าง โปรแกรมจะอ่านค่าข้อมูลจากไฟล์มาทีละบรรทัด โดยแต่ละบรรทัดจะมีอักขระพิเศษ \n สำหรับขึ้นบรรทัดใหม่กำกับมาให้อยู่แล้ว ดังนั้นในคำสั่ง print() เราได้มีการกำหนดให้ end=” เพื่อป้องกันไม่ให้มีการเขียนอักขระพิเศษสำหรับขึ้นบรรทัดใหม่ \n ซ้ำลงไปอีกทีหนึ่ง
- การอ่านข้อมูลออกจากไฟล์ทีละบรรทัดโดยใช้ฟังก์ชัน readline()
เราสามารถใช้ฟังก์ชัน readline() เพื่อทำการอ่านข้อมูลเพียงทีละบรรทัดเดียวออกจากไฟล์ และเมื่อฟังก์ชันดังกล่าวอ่านข้อมูลเสร็จแต่ละครั้งก็จะย้ายตำแหน่งของตัวชี้ข้อมูลไปยังตำแหน่งสุดท้ายที่ได้ทำการอ่านข้อมูลออกมาแล้ว โดยข้อมูลที่อ่านออกมาใหม่แต่ละบรรทัดจะมีข้อมูลของอักขระพิเศษสำหรับขึ้นบรรทัดใหม่ \n กำกับอยู่ด้วย
ตัวอย่างการใช้งาน# -*- coding: utf-8 -*- # ใช้งานคีย์เวิร์ด with ร่วมกับฟังก์ชัน open() เพื่อทำการเปิดไฟล์ # โดยอ้างอิงจากตำแหน่งไฟล์ที่อยู่ในโฟลเดอร์ปัจจุบันและทำการระบุขอบเขต # การใช้งานไฟล์เป็น 'r' ซึ่งจะทำให้สามารถเพียงอ่านข้อมูลจากไฟล์ที่ระบุได้ # และทำการระบุ encoding ให้ข้อมูลที่อ่านมาใช้งานในรูปแบบ utf-8 # โดยฟังก์ชันดังกล่าวจะคืนค่ามาเป็นออบเจ็คชนิดไฟล์และถูกเก็บไว้ # ในตัวแปร "source_file" สำหรับการเขียน/อ่าน ในลำดับต่อไป with open("data.csv", 'r', encoding='utf-8') as source_file: # ทำการอ่านข้อมูลบรรทัดแรก data = source_file.readline() # ทำการปรินต์ค่าข้อมูลออกมาแสดงผล print(data, end="") # โปรแกรมทำการปรินต์ค่า # "Location ","Date(yyyy/mm/dd)","Region","Maximum Temperature(°C) ","Minimum Temperature(°C)" # ทำการอ่านข้อมูลอีกบรรทัดถัดมา data = source_file.readline() # ทำการปรินต์ค่าข้อมูลออกมาแสดงผล print(data, end="") # โปรแกรมทำการปรินต์ค่า # "DON MUANG AIRPORT","2019/06/10","Central Part",33.5,26.5 - การอ่านข้อมูลออกจากไฟล์เป็นลิสต์ของข้อมูลแต่ละบรรทัดโดยใช้ฟังก์ชัน readlines()
การใช้งานฟังก์ชัน readlines() สำหรับอ่านข้อมูลทั้งหมดจากไฟล์ ออกมาเป็นลิสต์ของข้อมูลซึ่งแต่ละข้อมูลในลิสต์ก็คือ ข้อมูลในแต่ละบรรทัดจากไฟล์
ตัวอย่างการใช้งาน# -*- coding: utf-8 -*- # ใช้งานคีย์เวิร์ด with ร่วมกับฟังก์ชัน open() เพื่อทำการเปิดไฟล์ # โดยอ้างอิงจากตำแหน่งไฟล์ที่อยู่ในโฟลเดอร์ปัจจุบันและทำการระบุขอบเขต # การใช้งานไฟล์เป็น 'r' ซึ่งจะทำให้สามารถเพียงอ่านข้อมูลจากไฟล์ที่ระบุได้ # และทำการระบุ encoding ให้ข้อมูลที่อ่านมาใช้งานในรูปแบบ utf-8 # โดยฟังก์ชันดังกล่าวจะคืนค่ามาเป็นออบเจ็คชนิดไฟล์และถูกเก็บไว้ # ในตัวแปร "source_file" สำหรับการเขียน/อ่าน ในลำดับต่อไป with open("data.csv", 'r', encoding='utf-8') as source_file: # ทำการอ่านข้อมูลออกมาเป็นลิสต์ของข้อมูล ซึ่งแต่ละข้อมูลภายในลิสต์ # ก็คือข้อมูลในแต่ละบรรทัด lines = source_file.readlines() idx = 1 for line in lines: # ทำการปรินต์ค่าข้อมูลออกมาแสดงผล โดยมีการจัดรูปแบบข้อความ # และมีการกำหนดให้ เมื่อจบข้อความไม่ต้องเพิ่มอักขระพิเศษ "\n" # ซึ่งเป็นค่าตั้งต้นออกมาด้วย print("บรรทัดที่ {}: {}".format( idx, line ), end="") idx = idx+1 # โปรแกรมทำการปรินต์ค่า # บรรทัดที่ 1: "Location ","Date(yyyy/mm/dd)","Region","Maximum Temperature(°C) ","Minimum Temperature(°C)" # บรรทัดที่ 2: "DON MUANG AIRPORT","2019/06/10","Central Part",33.5,26.5 # บรรทัดที่ 3: "DON MUANG AIRPORT","2019/06/11","Central Part",29.8,27.8 # บรรทัดที่ 4: "DON MUANG AIRPORT","2019/06/12","Central Part",34.2,26.4 # บรรทัดที่ 5: "DON MUANG AIRPORT","2019/06/13","Central Part",34.0,27.2 # บรรทัดที่ 6: "DON MUANG AIRPORT","2019/06/14","Central Part",34.3,27.4 # บรรทัดที่ 7: "DON MUANG AIRPORT","2019/06/15","Central Part",34.9,28.2 # บรรทัดที่ 8: "DON MUANG AIRPORT","2019/06/16","Central Part",33.8,26.6
- การอ่านข้อมูลจากไฟล์โดยใช้ฟังก์ชัน read()
-
ฟังก์ชันที่สามารถใช้งานกับไฟล์
ฟังก์ชัน รายละเอียด close() ปิดไฟล์ที่ทำการเปิดใช้(หากใช้คำสั่งนี้กับไฟล์ที่ถูกปิดอยู่ ก็ไม่มีผลใดๆ) detach() แยกข้อมูล binary buffer ออกจาก TextIOBase แล้วคืนค่าดังกล่าว fileno() คืนค่าจำนวนเต็มซึ่งเป็นข้อมูลแทนค่าของไฟล์นั้น(ส่วนหนึ่งของรายละเอียดไฟล์) flush() ทำการ flush ข้อมูลที่ถูกเขียนอยู่ใน buffer ให้ลงไปบันทึกในไฟล์ isatty() คืนค่า True ถ้า file stream นั้นตอบสนองอยู่ read(n) ทำการอ่านข้อมูลอย่างมาก n ตัวอักษรจากไฟล์ และจะทำอ่านข้อมูลจนจบไฟล์ถ้าค่า n ที่ระบุเป็นจำนวนลบหรือไม่มีการระบุข้อมูล(None) readable() คืนค่า True ถ้า file stream สามารถจะอ่านข้อมูลได้ readline(n=-1) อ่านข้อมูลและคืนค่าข้อมูลดังกล่าว 1 บรรทัดจากไฟล์ โดยหากมีการระบุค่า n ก็จะทำการอ่านข้อมูลมากที่สุดเป็นจำนวน n ไบต์ readlines(n=-1) อ่านข้อมูลและคืนค่าลิสต์ของข้อมูลแต่ละบรรทัดจากไฟล์ โดยหากมีการระบุค่า n ก็จะอ่านข้อมูลมากที่สุด n ไบต์/ตัวอักษร seek(offset, from=SEEK_SET) เปลี่ยนตำแหน่งชี้ข้อมูลปัจจุบันของไฟล์ไปเป็นจำนวน offset ไบต์ seekable() คืนค่า True ถ้าไฟล์รองรับ random access tell() คืนค่าตำแหน่งชี้ข้อมูลปัจจุบันออกมา truncate(size=None) ทำการเปลี่ยนแปลงขนาดของ file stream ให้เป็นขนาด size ไบต์ โดยถ้าไม่ระบุข้อมูล size ให้เปลี่ยนแปลงขนาดให้เท่ากับตำแหน่งที่ชี้ไฟล์ข้อมูลในปัจจุบัน writable() คืนค่า True ถ้า file stream สามารถถูกเขียนข้อมูลลงไปได้ write(s) เขียนข้อความที่ระบุใน s ลงไปในไฟล์และคืนค่าจำนวนอักขระที่ถูกเขียนลงไปออกมา writelines() เขียนข้อมูลจากลิสต์ของข้อมูลแต่ละบรรทัดลงไปในไฟล์
โดยบรรทัดแรกของข้อมูลจะระบุชนิดของข้อมูลในแต่ละคอลัมน์ สำหรับบรรทัดอื่นๆถัดมาทั้งหมดจะเป็นข้อมูลอุณหภูมิสูงสุด/ต่ำสุดของแต่ละวัน โดยข้อมูลในบรรทัดจะประกอบด้วย รายละเอียดดังนี้
โดยข้อมูลจะบันทึกด้วยชื่อไฟล์ “data.csv” ด้วยข้อมูลดังนี้
ตัวอย่างข้อมูล
"Location ","Date(yyyy/mm/dd)","Region","Maximum Temperature(°C) ","Minimum Temperature(°C)" "DON MUANG AIRPORT","2019/06/10","Central Part",33.5,26.5 "DON MUANG AIRPORT","2019/06/11","Central Part",29.8,27.8 "DON MUANG AIRPORT","2019/06/12","Central Part",34.2,26.4 "DON MUANG AIRPORT","2019/06/13","Central Part",34.0,27.2 "DON MUANG AIRPORT","2019/06/14","Central Part",34.3,27.4 "DON MUANG AIRPORT","2019/06/15","Central Part",34.9,28.2
สำหรับข้อมูลดังกล่าว หากเรานำมาจัดอยู่ในรูปแบบตารางจะมีลักษณะดังนี้
| Location | Date (yyyy/mm/dd) |
Region | Max. Temperature (°C) |
Min. Temperature (°C) |
|---|---|---|---|---|
| DON MUANG AIRPORT | 2019/06/10 | Central Part | 33.5 | 26.5 |
| DON MUANG AIRPORT | 2019/06/11 | Central Part | 29.8 | 27.8 |
| DON MUANG AIRPORT | 2019/06/12 | Central Part | 34.2 | 26.4 |
| DON MUANG AIRPORT | 2019/06/13 | Central Part | 34.0 | 27.2 |
| DON MUANG AIRPORT | 2019/06/14 | Central Part | 34.3 | 27.4 |
| DON MUANG AIRPORT | 2019/06/15 | Central Part | 34.9 | 28.2 |
ที่มาของข้อมูลอุณหภูมิสูงสุด/ตำสุด:https://www.tmd.go.th/en/climate.php?FileID=1
