Python CLI จัดการข้อความในไฟล์ ไม่ต้องเปิดให้วุ่นวาย

สวัสดีครับ เพื่อนๆ ทุกคน

วันนี้ ผมมีเรื่องน่าสนใจเกี่ยวกับ python cli ที่จะช่วยให้งานจัดการไฟล์ข้อความของเราง่ายขึ้นเยอะเลยครับ แบบว่าไม่ต้องเปิดไฟล์มานั่งแก้ทีละบรรทัดให้วุ่นวายเลยนะ เราจะใช้ Python สร้างเครื่องมือเล็กๆ ที่รันจาก Command Line ได้เลย ลองดูตัวอย่างกันเลยนะครับ

1. เปลี่ยนข้อความในไฟล์ ง่ายๆ เลย

สมมุติว่าเรามีไฟล์ชื่อ my_data.txt ที่มีข้อความแบบนี้:

ชื่อ: สมชาย
เบอร์โทร: 081-234-5678
อีเมล: [email protected]

แล้วอยากจะเปลี่ยน "สมชาย" เป็น "สมหญิง" นะครับ เราสามารถเขียน Python CLI ง่ายๆ แบบนี้ได้เลย:

# replace_text.py
import argparse

def replace_in_file(filepath, old_text, new_text):
    with open(filepath, 'r', encoding='utf-8') as file:
        content = file.read()
    new_content = content.replace(old_text, new_text)
    with open(filepath, 'w', encoding='utf-8') as file:
        file.write(new_content)
    print(f"เปลี่ยน '{old_text}' เป็น '{new_text}' ใน '{filepath}' เรียบร้อยแล้วครับ")

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='เปลี่ยนข้อความในไฟล์.')
    parser.add_argument('filepath', type=str, help='ตำแหน่งไฟล์ที่จะแก้ไข')
    parser.add_argument('old_text', type=str, help='ข้อความเก่าที่ต้องการเปลี่ยน')
    parser.add_argument('new_text', type=str, help='ข้อความใหม่ที่จะใส่เข้าไป')

    args = parser.parse_args()
    replace_in_file(args.filepath, args.old_text, args.new_text)

จากนั้น เราก็รันจาก Terminal ได้แบบนี้เลยครับ:

python replace_text.py my_data.txt สมชาย สมหญิง

แค่เนี่ยะะะะะะ ข้อความในไฟล์เราก็จะเปลี่ยนเป็น "สมหญิง" แล้วนะครับ เจ๋งไหมล่ะ!

2. ดึงข้อมูลเฉพาะที่ต้องการออกมาดู

บางที เราอาจจะอยากดึงแค่บรรทัดที่มีคำว่า "เบอร์โทร" ออกมาดูเฉยๆ นะครับ เราก็ปรับโค้ดนิดหน่อยได้แบบนี้:

# extract_lines.py
import argparse

def extract_lines_with_keyword(filepath, keyword):
    found_lines = []
    with open(filepath, 'r', encoding='utf-8') as file:
        for line in file:
            if keyword in line:
                found_lines.append(line.strip())

    if found_lines:
        print(f"เจอข้อมูลที่มี '{keyword}' ครับ:")
        for line in found_lines:
            print(line)
    else:
        print(f"ไม่เจอข้อมูลที่มี '{keyword}' ใน '{filepath}' ครับ")

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='ดึงบรรทัดที่มี Keyword ที่ต้องการ.')
    parser.add_argument('filepath', type=str, help='ตำแหน่งไฟล์')
    parser.add_argument('keyword', type=str, help='Keyword ที่ต้องการค้นหา')

    args = parser.parse_args()
    extract_lines_with_keyword(args.filepath, args.keyword)

แล้วก็รันแบบนี้นะครับ:

python extract_lines.py my_data.txt เบอร์โทร

ผลลัพธ์ที่ได้ก็จะโชว์แค่บรรทัดที่มีคำว่า "เบอร์โทร" ออกมาให้เราเห็นเลยครับ สะดวกมากๆ

3. จัดการข้อความให้เป็นระเบียบ (Trim Whitespace)

บางทีข้อมูลในไฟล์ของเราอาจจะมีช่องว่างเกินมา หน้า-หลัง แบบนี้:

  ชื่อ: สมชาย    
เบอร์โทร: 081-234-5678 
   อีเมล: [email protected]

เราก็เขียน CLI ให้ช่วยลบช่องว่างพวกนี้ออกได้นะครับ โดยใช้ stringmanipulation อย่าง .strip() แบบนี้เลย:

# trim_whitespace.py
import argparse

def trim_file_lines(filepath):
    cleaned_lines = []
    with open(filepath, 'r', encoding='utf-8') as file:
        for line in file:
            cleaned_lines.append(line.strip())

    with open(filepath, 'w', encoding='utf-8') as file:
        file.write('\
'.join(cleaned_lines))
    print(f"จัดการลบช่องว่างเกินใน '{filepath}' เรียบร้อยแล้วครับ")

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='ลบช่องว่างหน้า-หลังบรรทัดในไฟล์.')
    parser.add_argument('filepath', type=str, help='ตำแหน่งไฟล์ที่จะแก้ไข')

    args = parser.parse_args()
    trim_file_lines(args.filepath)

จากนั้นก็รันแบบนี้นะครับ:

python trim_whitespace.py my_data.txt

ไฟล์ my_data.txt ของเราก็จะดูเป็นระเบียบขึ้นมาเลยครับ ไม่มีช่องว่างเกินมาให้กวนใจแล้ว

เป็นไงบ้างครับ เพื่อนๆ สามารถเอาเทคนิค python cli กับ stringmanipulation แบบนี้ ไปประยุกต์ใช้กับงานของเราได้เยอะเลยนะครับ ไม่ว่าจะจัดการ Log File, แก้ไข Config File หรือปรับแต่งข้อมูลต่างๆ

ลองเอาไปเล่นดูนะครับ ผม cii3.net หวังว่าจะเป็นประโยชน์ไม่มากก็น้อยนะครับ แล้วเจอกันใหม่บทความหน้าครับ!

Read more

รมว.พลังงาน ปรับส่วนต่าง E20 ห่างโซฮอล์ 95 ลิตรละ 3 บาท กระตุ้นคนไทยใช้พลังงานสะอาด พร้อมขอความร่วมมือประหยัดไฟ

รมว.พลังงาน ปรับส่วนต่าง E20 ห่างโซฮอล์ 95 ลิตรละ 3 บาท กระตุ้นคนไทยใช้พลังงานสะอาด พร้อมขอความร่วมมือประหยัดไฟ

รมว.พลังงาน ประกาศปรับส่วนต่าง E20 ห่างโซฮอล์ 95 เป็น 3 บาท กระตุ้นใช้เชื้อเพลิงชีวภาพ พร้อมรณรงค์คนไทยประหยัดพลังงาน สร้างความมั่นคงพลังงานของชาติ

By ทีมงาน devdog
DMC: จากปรากฏการณ์ดนตรีระดับโลกสู่แสงธรรมนำทางชีวิต

DMC: จากปรากฏการณ์ดนตรีระดับโลกสู่แสงธรรมนำทางชีวิต

สำรวจสองความหมายสำคัญของ DMC! จาก Run-DMC ผู้บุกเบิกการร่วมงานฮิปฮอป-ร็อกที่พลิกโฉมวงการ สู่ dmc.tv ช่องธรรมะนำทางจิตใจเพื่อสันติสุขภายใน.

By ทีมงาน devdog
PM 2.5 กลับมาคลุ้ง! เปิด 12 อันดับค่าฝุ่นสูงสุดในกรุงเทพมหานคร

PM 2.5 กลับมาคลุ้ง! เปิด 12 อันดับค่าฝุ่นสูงสุดในกรุงเทพมหานคร

อัปเดตสถานการณ์ PM 2.5 ในกรุงเทพฯ ประจำวันที่ 10 มี.ค. 2569 พร้อมเปิด 12 เขตค่าฝุ่นสูงสุด และคำแนะนำป้องกันผลกระทบต่อสุขภาพ

By ทีมงาน devdog
One Piece Netflix ภาค 2: การผจญภัยสู่แกรนด์ไลน์ พร้อมกิจกรรมสุดอลังการที่สวนลุมฯ!

One Piece Netflix ภาค 2: การผจญภัยสู่แกรนด์ไลน์ พร้อมกิจกรรมสุดอลังการที่สวนลุมฯ!

One Piece Netflix ซีซัน 2 "มุ่งหน้าสู่แกรนด์ไลน์" เตรียมลงจอ 10 มี.ค. 2569 พร้อมกิจกรรม "GRAND LINE IN THAILAND" ที่สวนลุมพินี ห้ามพลาด!

By ทีมงาน devdog