5 Python Script ช่วยจัดการไฟล์ CSV แบบอัตโนมัติ ให้เป็นเรื่องง่ายและรวดเร็ว

บทนำ
ไฟล์ CSV เป็นส่วนหนึ่งของเกือบทุกเวิร์กโฟลว์ข้อมูล ไม่ว่าจะเป็นข้อมูลที่ส่งออกจากฐานข้อมูล แอปพลิเคชัน หรือกระบวนการทำงานแบบ Batch อย่างไรก็ตาม เรามักพบปัญหาเดิมๆ เช่น ตัวคั่นที่ไม่สม่ำเสมอ การเข้ารหัส (encoding) ผิดพลาด หรือมีข้อมูลซ้ำซ้อน ซึ่งการแก้ไขด้วยมือมักจะกินเวลาและเสี่ยงต่อความผิดพลาด
บทความนี้จึงรวบรวม 5 Python script ที่ช่วยจัดการงาน CSV ทั่วไปให้เป็นอัตโนมัติ โดยแต่ละสคริปต์ใช้เพียง Python standard library เท่านั้น คุณจึงรันได้ทันทีโดยไม่ต้องติดตั้งแพ็กเกจภายนอกหรือจัดการ dependency ให้วุ่นวาย
คุณสามารถค้นหาสคริปต์ทั้งหมดได้บน GitHub
1. Schema Validator
ปัญหาที่พบ (The Pain Point)
ไฟล์ CSV ที่ดูปกติในโปรแกรมสเปรดชีต อาจมีปัญหาซ่อนอยู่ เช่น คอลัมน์สำคัญหายไป รูปแบบวันที่ผิดพลาด หรือมีตัวอักษรปนในช่องตัวเลข ปัญหาเหล่านี้มักถูกตรวจพบในระบบปลายทาง ซึ่งทำให้การย้อนกลับมาแก้ไขต้นตอมีค่าใช้จ่ายสูงและเสียเวลา
สิ่งที่สคริปต์ทำ
สคริปต์นี้จะตรวจสอบไฟล์ CSV เทียบกับ schema ที่คุณกำหนด เช่น คอลัมน์ที่จำเป็น ประเภทข้อมูล และเงื่อนไขต่างๆ เช่น "ห้ามเป็นค่าว่าง" โดยจะแสดงรายงานข้อผิดพลาดแบบละเอียดรายแถว ช่วยให้ระบุตำแหน่งที่มีปัญหาได้อย่างแม่นยำ
วิธีการทำงาน
ตัว schema จะถูกกำหนดไว้ในไฟล์ JSON โดยระบุประเภทข้อมูล เช่น int, float, date หรือใช้ regex สคริปต์จะใช้ csv.DictReader อ่านข้อมูลทีละแถวเพื่อประหยัดหน่วยความจำ และตรวจสอบตามกฎที่ตั้งไว้ หากการตรวจสอบไม่ผ่าน สคริปต์จะแจ้งสถานะล้มเหลวทันที เหมาะสำหรับใช้เป็นประตูกั้นข้อมูลก่อนส่งเข้า pipeline
2. Row-Level Diff Tool
ปัญหาที่พบ (The Pain Point)
การเปรียบเทียบไฟล์ CSV สองเวอร์ชันเพื่อหาจุดที่ต่างกัน เช่น ข้อมูลของเมื่อวานเทียบกับวันนี้ มักเป็นเรื่องยากหากต้องเปิดดูทีละไฟล์ด้วยตาเปล่า โดยเฉพาะเมื่อข้อมูลมีปริมาณมาก ซึ่งเสี่ยงต่อการมองข้ามความเปลี่ยนแปลงสำคัญ
สิ่งที่สคริปต์ทำ
เปรียบเทียบไฟล์ CSV สองไฟล์โดยอ้างอิงจากคอลัมน์คีย์ (Key) ที่ระบุ และรายงานผลว่าแถวไหนเพิ่มขึ้น ถูกลบออก หรือมีการเปลี่ยนแปลงในฟิลด์ใดบ้าง โดยจะแสดงผลเฉพาะจุดที่มีการเปลี่ยนแปลงเพื่อให้ตรวจสอบได้ง่ายที่สุด
วิธีการทำงาน
สคริปต์จะอ่านไฟล์เข้าสู่ Dictionary และเปรียบเทียบข้อมูลด้วย Set เพื่อหาคีย์ที่เพิ่มหรือลด จากนั้นจะเจาะลึกในแต่ละคอลัมน์เพื่อบันทึกค่าเก่าและค่าใหม่ ผลลัพธ์ที่ได้จะเป็นไฟล์ CSV รายงานผลที่ประกอบด้วย change_type, ชื่อคอลัมน์ และค่าที่เปลี่ยนไป เพื่อให้นำไปกรองข้อมูลต่อได้สะดวก
3. Encoding and Delimiter Normalizer
ปัญหาที่พบ (The Pain Point)
ไม่ใช่ทุกไฟล์ CSV จะใช้คอมมา (,) คั่นเสมอไป และบางไฟล์อาจมาพร้อมการเข้ารหัสที่ผิดเพี้ยน หรือมี Byte-order mark (BOM) ติดมาด้วย สิ่งเหล่านี้มักทำให้โปรแกรมที่นำข้อมูลไปใช้ต่อเกิดข้อผิดพลาดในการประมวลผล
สิ่งที่สคริปต์ทำ
สคริปต์จะตรวจจับตัวคั่น (delimiter) และการเข้ารหัสตัวอักษร (encoding) ของไฟล์โดยอัตโนมัติ จากนั้นจะแปลงไฟล์ให้เป็นมาตรฐานเดียวกัน คือใช้คอมมาคั่นและเข้ารหัสแบบ UTF-8 ที่สะอาด พร้อมลบส่วนเกินที่ไม่จำเป็นออกทั้งหมด
วิธีการทำงาน
สคริปต์ใช้การอ่านไฟล์แบบ Binary และลองถอดรหัสด้วย Encoding รูปแบบต่างๆ ร่วมกับ csv.Sniffer เพื่อเดาตัวคั่น เช่น เซมิโคลอนหรือแท็บ เมื่อพบค่าที่ถูกต้องแล้วจะเขียนไฟล์ใหม่โดยใช้รูปแบบมาตรฐานของ Python และพิมพ์สรุปค่าเดิมที่ตรวจพบลงในคอนโซลเพื่อการตรวจสอบย้อนกลับ
4. Configurable Column Transformer
ปัญหาที่พบ (The Pain Point)
งานปรับโครงสร้างไฟล์ เช่น การเปลี่ยนชื่อคอลัมน์ จัดลำดับใหม่ หรือรวมข้อมูลจากหลายคอลัมน์เข้าด้วยกัน แม้จะทำได้ง่ายในสเปรดชีต แต่ถ้าต้องทำซ้ำๆ กับไฟล์จำนวนมากทุกวัน การใช้แรงงานคนจะกลายเป็นภาระที่น่าเบื่อและเสี่ยงต่อความผิดพลาด
สิ่งที่สคริปต์ทำ
สคริปต์จะทำงานตามคำสั่งที่ระบุไว้ในไฟล์ Config เช่น สั่งให้ rename, drop หรือ derive (สร้างคอลัมน์ใหม่) โดยใช้ไวยากรณ์นิพจน์ที่ปลอดภัย ทำให้อ่านง่ายและทำงานได้อย่างแม่นยำแม้ในไฟล์ที่มีโครงสร้างซับซ้อน
วิธีการทำงาน
การตั้งค่าจะอยู่ในรูปแบบ JSON ที่ลำดับขั้นตอนชัดเจน เช่น การรวมคอลัมน์ {first_name} {last_name} หรือการแปลงหน่วยเงิน สคริปต์ประมวลผลแบบ Streaming ด้วย csv.DictReader และ csv.DictWriter ทำให้ใช้หน่วยความจำน้อยมาก ไม่ว่าไฟล์ต้นฉบับจะใหญ่แค่ไหนก็ตาม
⏩ รับสคริปต์ column transformer
5. Sampler and Field Anonymizer
ปัญหาที่พบ (The Pain Point)
เมื่อต้องแบ่งปันข้อมูลจริงให้ทีมงานหรือฝ่ายสนับสนุน การส่งไฟล์ทั้งหมดอาจเสี่ยงต่อความปลอดภัยของข้อมูล หรือหากต้องมานั่งเซ็นเซอร์ข้อมูลส่วนบุคคลทีละช่องด้วยตัวเองก็เป็นงานที่หนักเกินไป
สิ่งที่สคริปต์ทำ
สุ่มตัวอย่างข้อมูลจากไฟล์ขนาดใหญ่ และทำข้อมูลนิรนาม (Anonymize) ในคอลัมน์ที่ละเอียดอ่อน โดยการแทนที่ด้วยโทเคนที่ไม่สามารถย้อนกลับได้ แต่ยังคงความสม่ำเสมอของข้อมูลไว้เพื่อให้สามารถนำไปทดสอบระบบต่อได้โดยไม่เปิดเผยข้อมูลจริง
วิธีการทำงาน
ใช้เทคนิค Reservoir sampling เพื่อสุ่มเลือกแถวโดยไม่ต้องโหลดไฟล์ทั้งหมดเข้าเครื่อง ซึ่งมีประสิทธิภาพสูงสำหรับไฟล์ขนาดใหญ่ ส่วนข้อมูลที่ละเอียดอ่อนจะถูกทำ Keyed hash ให้กลายเป็นโทเคนที่อ่านง่าย ทำให้รักษาความสัมพันธ์ระหว่างแถวข้อมูลไว้ได้โดยไม่สูญเสียความเป็นส่วนตัว
⏩ รับสคริปต์ sampler and anonymizer
บทสรุป
สคริปต์ทั้ง 5 ชุดนี้ออกแบบมาเพื่อแก้ปัญหาจุกจิกที่คุณต้องเจอเป็นประจำในการทำงานกับ CSV ช่วยให้คุณลดเวลาการทำงานซ้ำๆ และสร้างความมั่นใจในคุณภาพของข้อมูลก่อนนำไปใช้งานจริง
| ชื่อสคริปต์ | วัตถุประสงค์ | คุณสมบัติเด่น | กรณีใช้งานที่ดีที่สุด |
|---|---|---|---|
| Schema Validator | ตรวจสอบไฟล์ตามกฎที่กำหนด | เช็คประเภทข้อมูล, รูปแบบ Regex | กรองข้อมูลก่อนเข้าสู่ Pipeline |
| Row-Level Diff Tool | เปรียบเทียบข้อมูลสองเวอร์ชัน | จับคู่ตาม Key, ระบุจุดต่างรายฟิลด์ | ตรวจสอบข้อมูลส่งออกแต่ละรอบ |
| Encoding & Normalizer | ปรับรูปแบบให้เป็นมาตรฐาน | ตรวจจับ Encoding และตัวคั่นอัตโนมัติ | ล้างข้อมูลจากระบบเก่า |
| Column Transformer | ปรับโครงสร้างคอลัมน์ | ใช้ Config สั่งงาน, รองรับไฟล์ใหญ่ | ปรับเปลี่ยนรูปทรงข้อมูลเดิมซ้ำๆ |
| Sampler & Anonymizer | สุ่มตัวอย่างและปกปิดข้อมูล | สุ่มแบบ Reservoir, ทำ Hash ข้อมูล | แชร์ข้อมูลทดสอบอย่างปลอดภัย |
ขอให้สนุกกับการเปลี่ยนงานยากให้เป็นเรื่องอัตโนมัติ!
ความคิดเห็น (0)
เข้าสู่ระบบเพื่อร่วมแสดงความเห็น
สมัครสมาชิกมาเป็นคนแรกที่แสดงความเห็นกันเลยโบร
