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

Useful Python Scripts to Automate CSV Processing

บทนำ

ไฟล์ 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

รับสคริปต์ schema validator

2. Row-Level Diff Tool

ปัญหาที่พบ (The Pain Point)

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

สิ่งที่สคริปต์ทำ

เปรียบเทียบไฟล์ CSV สองไฟล์โดยอ้างอิงจากคอลัมน์คีย์ (Key) ที่ระบุ และรายงานผลว่าแถวไหนเพิ่มขึ้น ถูกลบออก หรือมีการเปลี่ยนแปลงในฟิลด์ใดบ้าง โดยจะแสดงผลเฉพาะจุดที่มีการเปลี่ยนแปลงเพื่อให้ตรวจสอบได้ง่ายที่สุด

วิธีการทำงาน

สคริปต์จะอ่านไฟล์เข้าสู่ Dictionary และเปรียบเทียบข้อมูลด้วย Set เพื่อหาคีย์ที่เพิ่มหรือลด จากนั้นจะเจาะลึกในแต่ละคอลัมน์เพื่อบันทึกค่าเก่าและค่าใหม่ ผลลัพธ์ที่ได้จะเป็นไฟล์ CSV รายงานผลที่ประกอบด้วย change_type, ชื่อคอลัมน์ และค่าที่เปลี่ยนไป เพื่อให้นำไปกรองข้อมูลต่อได้สะดวก

รับสคริปต์ diff tool

3. Encoding and Delimiter Normalizer

ปัญหาที่พบ (The Pain Point)

ไม่ใช่ทุกไฟล์ CSV จะใช้คอมมา (,) คั่นเสมอไป และบางไฟล์อาจมาพร้อมการเข้ารหัสที่ผิดเพี้ยน หรือมี Byte-order mark (BOM) ติดมาด้วย สิ่งเหล่านี้มักทำให้โปรแกรมที่นำข้อมูลไปใช้ต่อเกิดข้อผิดพลาดในการประมวลผล

สิ่งที่สคริปต์ทำ

สคริปต์จะตรวจจับตัวคั่น (delimiter) และการเข้ารหัสตัวอักษร (encoding) ของไฟล์โดยอัตโนมัติ จากนั้นจะแปลงไฟล์ให้เป็นมาตรฐานเดียวกัน คือใช้คอมมาคั่นและเข้ารหัสแบบ UTF-8 ที่สะอาด พร้อมลบส่วนเกินที่ไม่จำเป็นออกทั้งหมด

วิธีการทำงาน

สคริปต์ใช้การอ่านไฟล์แบบ Binary และลองถอดรหัสด้วย Encoding รูปแบบต่างๆ ร่วมกับ csv.Sniffer เพื่อเดาตัวคั่น เช่น เซมิโคลอนหรือแท็บ เมื่อพบค่าที่ถูกต้องแล้วจะเขียนไฟล์ใหม่โดยใช้รูปแบบมาตรฐานของ Python และพิมพ์สรุปค่าเดิมที่ตรวจพบลงในคอนโซลเพื่อการตรวจสอบย้อนกลับ

รับสคริปต์ normalizer

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 ข้อมูลแชร์ข้อมูลทดสอบอย่างปลอดภัย

ขอให้สนุกกับการเปลี่ยนงานยากให้เป็นเรื่องอัตโนมัติ!

Source: KDnuggets
ดูแลงานแปลและเรียบเรียงโดย SirilukP

ความคิดเห็น (0)

เข้าสู่ระบบเพื่อร่วมแสดงความเห็น

สมัครสมาชิก

มาเป็นคนแรกที่แสดงความเห็นกันเลยโบร