Skip to content

เขียนและอ่านข้อมูลจากเท็กซ์ไฟล์บน Python 3

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


เท็กซ์ไฟล์ (Text Files) เป็นอีกหนึ่งรูปแบบในการบันทึกข้อมูลครับ

มาเริ่มต้นที่การเปิดไฟล์กัน

รูปแบบการเปิดไฟล์

ตัวแปร = open(ชื่อไฟล์, โหมดการเปิดไฟล์)


โหมดการเปิดไฟล์ที่ใช้กับเท็กซ์ไฟล์

r คือ อ่านเพียงอย่างเดียว
w คือ เขียนเพียงอย่างเดียว ถ้ายังไม่มีไฟล์ จะสร้างไฟล์ใหม่
w+ คือ เขียน สร้างไฟล์ใหม่ หรือแทนที่ข้อมูลเดิม
a คือ เปิดไฟล์แล้วเขียนข้อมูลต่อท้ายข้อมูลเดิม
r+ คือ  เปิดไฟล์เพื่ออ่านหรือเขียนข้อมูลทับไฟล์
ตัวอย่าง

a = open('work1.txt', 'w')

เขียนข้อมูลลงเท็กซ์ไฟล์

สำหรับโหมดเขียนข้อมูลลงไฟล์นี้ ห้ามใช้ r ครับเพราะโหมดนี้ไม่สามารถเขียนข้อมูลลงไฟล์ได้ครับ
มีรูปแบบดังนี้ครับ

ตัวแปรที่เปิดไฟล์.write(ข้อความหรือตัวแปร)

ตัวอย่าง

a = open('work1.txt', 'w')
a.write('This is a testn')

ผลลัพธ์

เขียนข้อมูลรายการ (List) ลงเท็กซ์ไฟล์ทีละบรรทัด

มีรูปแบบดังนี้

ตัวแปรที่เปิดไฟล์.writelines(List ข้อมูล)

อ่านข้อมูลจากเท็กซ์ไฟล์

มีรูปแบบดังนี้

ตัวแปรที่เปิดไฟล์.read()

ตัวอย่าง

a = open('work1.txt', 'r')
a.read()

ผลลัพธ์


หรือจะใช้ with

with open('work1.txt', 'r') as f:
     read_data = f.read()

print(read_data)

ผลลัพธ์

อ่านข้อมูลจากเท็กซ์ไฟล์ทีละบรรทัด

ในการอ่านข้อมูลทีละบรรทัดนี้ Python ได้แบ่งบรรทัดโดยอ้างอิง n ครับ เวลาเขียนข้อมูลลงไฟล์ หากต้องการขึ้นบรรทัดใหม่ให้ใส่ n ตามหลังเข้าไปด้วยนะครับ
มีรูปแบบดังนี้

ตัวแปรที่เปิดไฟล์.readline()

ตัวอย่าง

a = open('work2.txt', 'r')
a.readline()

ปิดไฟล์หลังเรียกใช้งาน

เมื่อเรียกใช้งานไฟล์เสร็จ ควรที่จะปิดไฟล์เพื่อคืนทรัพยากรให้กับระบบครับ
มีรูปแบบการใช้งานดังนี้ครับ

ตัวแปรที่เปิดไฟล์.close

ตัวอย่าง

a.close

ผลลัพธ์

ฟังก์ชันเพิ่มเติม

  • ตัวแปรที่เปิดไฟล์.name - จะคืนค่าชื่อไฟล์ที่เปิดอยู่
  • ตัวแปรที่เปิดไฟล์.mode - จะคืนค่าโหมดการเปิดไฟล์ เช่น w , r เป็นต้น

แบบฝีกหัด

  1. จงเขียนโปรแกรมอ่านข้อความจากเท็กซ์ไฟล์
  2. จงเขียนโปรแกรมเก็บข้อความจากที่ผู้ใช้กรอกลงไปในเท็กซ์ไฟล์
  3. ให้ข้อมูลในไฟล์ b.txt มีเลข 5 อยู่ ให้ดึงค่าตัวเลขมาลบด้วย 4 แล้วแสดงผลลัพธ์ที่ได้ใน Python
  4. จงเขียนโปรแกรมให้สร้างไฟล์ a.txt แล้วเขียนเลข 2 ลงไปในไฟล์ แล้วให้ดึงค่าจากในไฟล์มาลบ 1 แล้วนำผลลัพธ์ที่ได้ไปเก็บแทนที่เลข 2 ใน a.txt

เฉวยข้อ 3 - 4 ท้ายบทความ

การนำไปประยุกต์ใช้

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

#!/usr/bin/python
#-*-coding: utf-8 -*-
print ("The program notesbook")
print ("Build by Wannaphong")
print ("What you do?")
print ("1.To write n 2.Read")
x = int(input("input: ")) #จะใช้ if else ในการเช็ค
if x == 1:
    a = open('notes.txt','a+') #ใช้โหมดเปิดไฟล์ a+ เขียนต่อท้ายข้อมูลเดิม ถ้าไม่มีไฟล์ให้สร้างไฟล์ใหม่
    ab = input("input: ") #รับข้อมูล
    a.write(ab)#เขียนข้อมูลลงไฟล์
    print ("Ok, Text's:",ab) #แสดงข้อมูลที่บันทึก
    a.close #ปิดไฟล์
elif x == 2:
    a = open('notes.txt','r+')#ใช้โหมดเปิดไฟล์ r+ อ่านข้อมูลในไฟล์ ถ้าไม่มีไฟล์ให้สร้างไฟล์ใหม่
    print (a.read())#แสดงข้อมูลในไฟล์
    a.close #ปิดไฟล์

ผลลัพธ์

ขอบคุณครับ


เฉลยแบบฝึกหัด ข้อ 3, 4

ข้อ 3

f = open('b.txt','r') #เปิดไฟล์ b.txt
to = f.read() #อ่านไฟล์ b.txt
a = int(to) #เนื่องจากค่าที่อ่านได้จะเป็น str ต้องแปลงเป็น int ก่อน
s = a-4
print(s)
f.close #ปิดไฟล์

ข้อ 4

import sys

f = open('a.txt','w+') #เปิดไฟล์ a.txt  ถ้ายังไม่มีไฟล์ ให้สร้างไฟล์ใหม่
f.write('2') #เก็บค่า str '2' ลงไป
f.close() #ปิดไฟล์

f = open('a.txt','r') #เปิดไฟล์ a.txt ให้สิทธิ์แค่อ่านไฟล์
to = f.read() #อ่านไฟล์ a.txt
a = int(to) #เนื่องจากค่าที่อ่านได้จะเป็น str ต้องแปลงเป็น int ก่อน

s = a-1
s = str(s) #แปลงให้เป็น str ก่อนเก็บเข้าไฟล์
f.close() #ปิดไฟล์
f = open('a.txt','w+') #เปิดไฟล์ a.txt  ถ้ายังไม่มีไฟล์ ให้สร้างไฟล์ใหม่ หรือแทนที่ข้อมูลเดิม
f.write(s)
f.close() #ปิดไฟล์
Published on Categories ไม่มีหมวดหมู่

About wannaphong

วรรณพงษ์ ภัททิยไพบูลย์ ผู้ดูแลเว็บ wannaphong.com และผู้เขียนบทความบล็อกนี้ นักศึกษาชั้นปีที่ 1 สาขาวิทยาการคอมพิวเตอร์และสารสนเทศ คณะวิทยาศาสตร์ประยุกต์และวิศวกรรมศาสตร์ มหาวิทยาลัยขอนแก่น วิทยาเขตหนองคาย

38 thoughts on “เขียนและอ่านข้อมูลจากเท็กซ์ไฟล์บน Python 3

    1. สุทิน

      ผมอยากสอบถาม ถ้าเรา จะเขียนโค้ดที่ python แล้วให้ไปปรากฏที่ .txt ไฟล์ 2 ไฟล์ เพื่อเปลียบเทีบ เรื่องเซ็ต เช่นการ สร้าง text ไฟล์ 2 ไฟล์
      กรอกข้อมูลลงในแต่ละไฟล์
      -ให้แสดง ข้อมูล ที่เหมือนกัน ของ 2 ไฟล์
      -ให้แสดงข้อมูล ของ ไฟล์ 2 ที่ไม่เหมือน ไฟล์ที่ 1
      แนะนำวิธีทำหน่อยครับ

      Reply
  1. ronnaphob

    r = sr.Recognizer()
    with sr.Microphone() as source:
    audio = r.listen(source)
    try:
    print("You said " + r.recognize_google(audio,language = "th-TH"))
    s = r.recognize_google(audio,language = "th-TH")
    print(s)
    except LookupError:
    print("Could not understand audio")
    x = str(s)
    a = open('ledon11.txt', 'w')
    aa=a.read()
    if x==aa:

    ผมมีโค๊ดประมาณนี้ครับคือผมมีคำสั่งเก็บไว้ใน.txt แล้วผมรับเสียงมาเพื่อจะเปรียบเทียบว่าเสียงที่ได้มาตรงกับ.txt รึป่าว ประมาณนี้อ่าครับพอแนะนำได้รึป่าวครับ

    ขึ้นประมาณนี้ครับ

    Traceback (most recent call last):
    File "main.py", line 29, in
    aa=a.read()
    io.UnsupportedOperation: not readable

    Reply
    1. wannaphong

      อ่านข้อมูลจากไฟล์ ใช้โมดูล r ครับ ส่วนโหมด w เป็นโหมดเขียนข้อมูลครับ

      a = open('ledon11.txt', 'w')

      เป็น

      a = open('ledon11.txt', 'r')

      ครับ

      Reply
  2. ronnaphob

    รบกวนสอบถามอีกครั้งครับแล้วจะนำข้อมูล.txt มาเปรียบเทียบกับเสียงที่รับมาใน เงื่อนไข if ยังไงหรอครับ

    Reply
    1. wannaphong

      อ่านข้อมูลจากไฟล์ ตัดคำแล้วใช้ if เช็คครับ
      ตัวอย่างเช่น

      if datafile == "เปิด":
       print("Ok")
      

      ประมาณนี้ครับ

      Reply
  3. วิศณุ

    สอบถามหน่อยครับ
    ผมอยากทราบว่า
    จะใช้คำสั่งอะไรในการ อ่านวีดีโอ ขึ้นมาครับ
    ในภาษา python ผมจะทำประมานว่า
    เก็บโคดไว้ใน python ใน โคตจะส่งคำสั่งไปให้ใน cmd ในการเรียนใช้โปรเเกรมเล่นวีดีโอขึ้นมา ครับ เช่น ในส่วนของ cmd >> vlc One.mp4 มันจะเด้งวีดีโอ มาครับ พอทราบไหมครับ

    Reply
    1. wannaphong

      สามารถใช้โมดูล os สั่งงานด้วยคำสั่ง

      os.system("vlc One.mp4")

      ได้ครับ https://python3.wannaphong.com/2015/04/ไลบรารี-os-ใน-python.html
      หรือด้วยโมดูล envoy สามารถทำได้เหมือนกันด้วยคำสั่ง

      envoy.run("vlc One.mp4")

      ครับ https://python3.wannaphong.com/2015/08/รันคำสั่งภายนอกแล้วส่ง.html

      Reply
      1. วิศณุ

        ขอบคุณมากครับ

        สอบถามอีกหน่อยครับ

        ถ้าผมต้องการเล่นกับ usb โดย
        เมื่อมีการเสียบ usb เข้ามาให้มัน ตรวจสอบไฟล์ vdo ใน usb
        เเล้วทำการเล่นอัตโนมัติ แบบเดียวกับที่สั่งผ่าน cmd เลยครับ

        พอมี ตัวอย่างไหมครับ

        Reply
        1. wannaphong

          ลองเขียนคำสั่งลงไฟล์ autorun.inf ใน usb ครับ เขียนคำสั่งเรียก python โดยใช้ไฟล์ .bat ในการทำงาน
          ตัวอย่างเช่น
          ไฟล์ autorun.inf ใน usb

          [autorun]
          open = run.bat
          action = Run my program
          icon = your.ico
          

          ไฟล์ run.bat

          python -c "import os;os.system('vlc One.mp4')"

          โดยทั้งไฟล์ run.bat และ autorun.inf อยู่ใน usb ครับ autorun.inf อาจไม่ทำงานใน windows บางรุ่นครับ

          Reply
  4. วิศณุ

    ขอบคุณมากครับ สอบถามอีกหน่อยน่ะครับ

    ถ้าผมต้องการให้ เมื่อเสียบ usb ให้ copy ไฟล์ วีดีโอนั้น

    มาไว้ที่หน้าเดสท๊อบเลย เเล้วให้มัน สั่ง รันโปรเเกรม vdo โดยเรียกไฟล์จาก หน้าเดสท๊อบ

    ตรงcopy ต้องเขียนโคตยังไงเหลอครับ

    Reply
    1. วิศณุ

      พอทำได้ละครับ ข้างบนที่ถาม
      สอบถามหน่อยครับ
      ถ้าผมจะเขียนโค็ต ให้ python
      เมื่อมีการกดปุ่มหรือสวิท มันจะส่ง ตัวอักษร p ไปใน cmd
      พอจะทำได้ไหมครับ ผมจะเอามาประยุกใช้

      Reply
        1. วิศณุ

          ติดตั้งเเล้ว ผมยังติด Error ตรง import pyautogui อยุ่ครับ
          ติดตั้ง หมดละนะครับ = =
          sudo pip3 install python3-xlib

          sudo apt-get scrot

          sudo apt-get install python-tk

          sudo apt-get install python3-dev

          sudo pip3 install pyautogui
          รบกวนดูให้ทีครับ

          Reply
          1. wannaphong

            ใน windows ใช้คำสั่ง

            pip install pyautogui

            ครับ คำสั่งที่ด้านบนเป็นคำสั่งสำหรับ Ubuntu ครับ

  5. วิศณุ

    มีวิธีอื่นที่ เหมือนกด สวิช (กดในเเป้นพิม ตัว p)
    เเล้วมันจะให้คำสั่งเดียวกับกดตัว p ไหมครับ
    มันเหมือนไม่รุ้จัก pyautogui

    Reply
  6. วิศณุ

    ผมใช้งานใน Raspberrypi ครับ
    โค็ตมัน Error ที่ import pyautogui
    เลย งงๆ ดูตามตัวอย่างกะลงถูกเเต่ยังติดเอ่อเร่อครับ

    Reply
    1. วิศณุ

      ได้ละครับ แต่โปรเเกรมวีดีโอ พอกดมัน ไม่หยุด
      แต่จะไปทำงานหลัง ไฟล์ วีดีโอเล่นเสจเเล้ว
      เหมือน พิมเเสดง ตัว p มาเฉยๆ ครับ

      Reply
        1. Wiza

          ขอบคุณครับ มีที่เกี่ยวกับ
          การกำหนดค่า ส่งข้ามคราสได้ไหมครับ
          ประมาณว่า ผมมีไฟล์ นึงสำหรับเล่นวิดีโอ เเต่จะให้มันรับ
          ความกว้าง สูง (ขนาด) มาจากไฟล์อีกไฟล์ ซึ่งผมจะเก้บเป็นตัวเเปร
          เเล้วดึงเอาตัวเเปรนั้น มาใช้ในไฟล์ที่เก็บวีดีโอ
          ต้องศึกษา เกี่ยวกับไรครับ

          Reply
          1. Wiza

            ครับ ผมลองทำออโต้รัน ตามคำแนะนำเเล้ว

            เเต่เวลาเสียบ usb มันยังไม่ได้เรียกโปรเเกรม ที่เขียนมาครับ
            ไฟล์ test.bat
            python -c 'import os;os.system('omxplayer mp4.mp4')'

            ไฟล์ autorun.inf
            [autorun]
            open = test.bat
            action = Run my program
            icon = your.ico

          2. de

            ครับ ผมลองทำออโต้รัน ตามคำแนะนำเเล้ว

            เเต่เวลาเสียบ usb มันยังไม่ได้เรียกโปรเเกรม ที่เขียนมาครับ
            ไฟล์ test.bat
            python -c 'import os;os.system('omxplayer mp4.mp4')'

            ไฟล์ autorun.inf
            [autorun]
            open = test.bat
            action = Run my program
            icon = your.ico

  7. ออน

    อยากจะบันทึกข้อมูลลงฐานข้อมูลต้องเขียนอย่างไรค่ะ

    Reply
  8. ออน

    จะบันทึกโค๊ดที่รันค่าความชื้นมาเก็บในฐานข้อมูลต้องทำอย่างไรค่ะ

    Reply
  9. BlackCodeRTH

    สอบถามเกี่ยวกับ
    หากเราจะเขียนไฟล์เป็นภาษาไทยหน่อยครับ
    พอดีข้อมูลที่จะเขียนลงไปเป็นภาษาไทย พอเขียนไฟล์มันเลยแจ้งเตือนเออเร้อครับลองใช้
    a = open('work1.txt', 'w','utf-8') ก็ยังไม่ได้เหมือนกันครับ พอมีตัวอย่างวิธีที่ถูกมั้ยครับ หรือต้องประกาศอะไรก่อนรึป่าวครับ ขอบคุณครับ

    Reply
    1. wannaphong

      ผมใช้ Python 3 เขียนภาษาไทยได้ตามปกติครับ แต่ถ้า Python 2 ให้ใช้

      a = open('work1.txt', 'w',encoding='utf-8')

      แล้วลองเช็คดูว่าข้อมูลที่เขียนเป็น str ไหมครับ

      Reply
  10. คัคเนศ หรบรรณ์

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

    num=0
    a=open('sct323.csv','a')
    name=raw_input("input name : ")
    lastname=raw_input("input lastname :")
    outer =1
    while name!='stop':

    name=raw_input("input name : ")
    lastname=raw_input("input lastname : ")
    num = num+1
    while i in outer :
    outer =outer+1
    a.write(outer,name+','+lastname+'\n')
    if name=='stop' or lastname=='stop':
    a.close()

    Reply
    1. คัคเนศ หรบรรณ์

      แก้ไขโค้ดครับ
      num=0
      a=open('sct323.csv','w')
      number=raw_input("input number :")
      id_name=raw_input("input id name :")
      name=raw_input("input name : ")
      lastname=raw_input("input lastname :")
      while number!='stop':
      a.write(number+','+id_name+','+name+','+lastname+'\n')
      number=raw_input("input number :")
      id_name=raw_input("input id name :")
      name=raw_input("input name : ")
      lastname=raw_input("input lastname : ")
      num = num+1
      if number=='stop' or id_name=='stop' or name=='stop' or lastname=='stop':
      a.close()

      Reply
      1. wannaphong

        ลองใช้หลักการนี้ดูนะครับ อ่านไฟล์แล้วนับว่ามีข้อมูลอยู่กี่บรรทัด แล้วนำจำนวนบรรทัดที่ได้มา +1 แล้วเก็บไว้กับตัวแปร number ครับ

        Reply
        1. ทินกร

          fn=raw_input("input you file:");

          str_fn=open(fn,'w');
          strText="""
          Menu
          press 1 input new text
          press 2 remove an item from set
          press 0 exit loop""";

          print strText;
          menu=int(raw_input("input menu"));
          newTxt=set();
          while menu>0:

          if menu==1:
          new_text=raw_input("input new text\t");
          newTxt.add(new_text);
          elif menu==2:
          reTxt=raw_input("input text to remove");
          newTxt.discard(reTxt);
          else:
          break;
          print newTxt;
          menu=int(raw_input("input menu"));

          print newTxt;
          for ln in newTxt:
          newLine="\n"+ln;
          print newLine;
          # write to file
          # variable.write();
          str_fn.write(newLine);

          str_fn.close();

          ผมอยากสอบถามเกียวกับโค้ดนี้ ว่าถ่าเราจะ จะเขีนยให้run ออกทาง .txt file
          โดยเขียนโค้ดเดียว ให้ run ออก 2 txt file เพื่อเปลียบเทียบเรื่องเซ็ตเช่น เขียน python runออกมา 2 txt ไฟล์ ให้เหมือนกัน และ เขียนpython runออกมา 2 txt ไฟล์ โดยอีกไฟล์หนึ่ง ไม่เหมือนอีกไปรหนึ่ง
          มีวิ๊ทำยังใงบ้างครับ ขอคำแนะนำหน่อยครับ

          Reply
  11. PASIN

    สอบถามหน่อยครับ
    ถ้าอ่านแยกบรรทัดอ่ะครับ
    เช่นมีไฟล์r.txt
    2
    3
    4

    ใช่python แยกตัวเลขแต่ล่ะบรรทัดยังไงครับ
    led = int(3)
    lcd = int (4)

    Reply
    1. wannaphong

      ใช้ for ลูปใน with open(): ครับ
      ตัวอย่าง

      # อ่านทีละบรรทัด
      a=[]
      with open('r.txt', 'r') as f:
      	for line in f:
      		a.append(int(line))
       
      print(a)
      

      ผลลัพธ์

      [2, 3, 4]
      Reply

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องที่ต้องการถูกทำเครื่องหมาย *