Python – File I/O

og:image

Python – File I/O

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



ตัวอย่างลักษณะของไฟล์ข้อมูลและรูปภาพ

เนื่องจากข้อมูลที่ถูกบันทึกในรูปแบบไฟล์นั้นถูกจัดเก็บบนหน่วยความจำแบบถาวร สำหรับอุปกรณ์ชนิดดังกล่าวดังกล่าว แม้ไม่มีไฟเลี้ยงส่งไปให้อุปกรณ์ก็จะยังมีข้อมูลเก็บอยู่ในหน่วยความจำ(non-valtile memory)หากข้อมูลถูกบันทึกไปแล้ว เช่น อุปกรณ์เก็บข้อมูล ฮาร์ดิสก์(harddisk), ยูเอสบีไดรฟ์(usb drive) โดยหน่วยความจำแบบถาวรนั้นจะมีความแตกต่างกับหน่วยความจำแบบชั่วคราว(volatile memory) เช่นอุปกรณ์จำพวกแรม(RAM: random access memeory) ซึ่งอุปกรณ์เก็บข้อมูลบนหน่วยความจำชั่วคราวนี้ อุปกรณ์ดังกล่าวจะสูญเสียข้อมูลทั้งหมดเมื่อทำการปิดคอมพิวเตอร์ไป เพราะไม่มีไฟส่งไปเลี้ยงให้อุปกรณ์สำหรับเก็บข้อมูลนั้น แต่สำหรับการอ่าน/เขียนข้อมูลในรูปแบบนี้จะใช้เวลาน้อยกว่ามากเมื่อเทียบกับการอ่าน/เขียน ข้อมูลจากหน่วยความจำแบบถาวร

การเก็บข้อมูลทั้งหน่วยความจำแบบชั่วคราว(volatile memory)และหน่วยความจำแบบถาวร(non-volatile memory)นั้นจะมีข้อดีข้อเสียแตกต่างกันไป โดยขึ้นอยู่กับบริบทที่ต้องการใช้งาน เราสามารถเลือกใช้การเก็บข้อมูลตามความเหมาะสม โดยในบทความนี้เราจะทำการพูดถึงรายละเอียดการอ่าน/เขียน ข้อมูลซึ่งถูกเก็บไว้ในรูปแบบของไฟล์ ซึ่งเป็นการเก็บข้อมูลในหน่วยความจำแบบถาวรรูปแบบหนึ่ง

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

    • ทราบชื่อไฟล์และตำแหน่งที่ไฟล์ดังกล่าวถูกบันทึก
    • เปิดไฟล์
    • อ่าน/เขียน ไฟล์
    • ปิดไฟล์
  2. สร้างไฟล์ข้อมูลชนิดข้อความ(text)สำหรับการใช้งานสำหรับบทความนี้
    สำหรับในบทนี้เราจะทำการอ่าน/เขียน ข้อมูลจากไฟล์ที่เป็นข้อความ ซึ่งตัวข้อมูลในไฟล์เป็นข้อมูลของอุณหภูมิสูงสุด/ต่ำสุดจากสนามบินดอนเมืองช่วงวันที่ 10-15 มิถุนายน 2562(ที่มาของข้อมูล)
  3. โดยบรรทัดแรกของข้อมูลจะระบุชนิดของข้อมูลในแต่ละคอลัมน์ สำหรับบรรทัดอื่นๆถัดมาทั้งหมดจะเป็นข้อมูลอุณหภูมิสูงสุด/ต่ำสุดของแต่ละวัน โดยข้อมูลในบรรทัดจะประกอบด้วย รายละเอียดดังนี้

    • สถานที่(Location): ระบุชื่อสถานที่ หรือ ชื่อจังหวัดที่ทำการเก็บข้อมูล
    • วันที่(Date): ระบุวันที่ที่ทำการเก็บข้อมูล
    • ภูมิภาค(Region): ระบุภูมิภาคของต่ำแหน่งที่ทำการเก็บข้อมูล
    • อุณหภูมิสูงสุด(Maximum Temperature): ระบุอุณหภูมิสูงสุด(องศาเซลเซียส) ณ วันที่ที่ระบุ
    • อุณหภูมิต่ำสุด(Minimum Temperature): ระบุอุณหภูมิต่ำสุด(องศาเซลเซียส) ณ วันที่ที่ระบุ

    โดยข้อมูลจะบันทึกด้วยชื่อไฟล์ “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
  4. เริ่มต้นทำการเปิดไฟล์(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)"
      
      
  5. ทำการปิดไฟล์
    เมื่อเราดำเนินการกับไฟล์ที่เรียกใช้เสร็จแล้ว เราก็ควรจะปิดไฟล์ดังกล่าวด้วยวิธีที่ถูกต้องด้วย เพื่อจะได้ทำการคืนทรัพยากรที่เรียกใช้ระหว่างเปิดไฟล์ขึ้นมานั้น ส่งคืนกลับไปให้กับระบบปฏิบัติการ โดยเรียกใช้โดยใช้ฟังก์ชัน 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()
    
    
  6. การเปิดไฟล์ขึ้นมาใช้งานโดยมี 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 เพื่อปิดไฟล์และคืนทรัพยากรให้กับระบบ

  7. การใช้ 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)"
    
    
    
  8. การเขียนข้อมูลลงไฟล์
    หากต้องการเปิดไฟล์เพื่อทำการเพิ่มหรือแก้ไขข้อมูลลงไปในไฟล์นั้น ดังที่กล่าวไว้ในตอนต้นเกี่ยวกับการเปิดไฟล์ต้องระบุขอบเขต(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” หากไม่มีไฟล์ชื่อดังกล่าวอยู่และทำการเพิ่มข้อมูลที่กำหนดลงไป แต่ถ้ามีไฟล์นั้นอยู่แล้วจะเกิดข้อผิดพลาด

  9. การอ่านข้อมูลจากไฟล์
    หากเราเปิดไฟล์เพื่อต้องการเพียงแค่อ่านข้อมูล เราก็ควรระบุขอบเขตสำหรับการอ่านเท่านั้น ‘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
      
      
  10. ฟังก์ชันที่สามารถใช้งานกับไฟล์

    ฟังก์ชัน รายละเอียด
    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() เขียนข้อมูลจากลิสต์ของข้อมูลแต่ละบรรทัดลงไปในไฟล์

ที่มาของข้อมูล: https://www.programiz.com/python-programming/file-operation
ที่มาของข้อมูลอุณหภูมิสูงสุด/ตำสุด:https://www.tmd.go.th/en/climate.php?FileID=1