Learning AtlasIT Support → Cybersecurity
คลังบทอ่าน13.3 / ไพธอนและงานอัตโนมัติบทถัดไป
สารบัญบทอ่าน / Python and Automation / 13.3
04 · เขียนโค้ดและนำระบบไปใช้ · บท 13.3

Data Processing

ประมวลผลข้อมูล

ข้อมูลที่อ่านมามักต้องแยก ค้น หรือจัดลำดับ เข้าใจโครงสร้างก่อนใช้รูปแบบค้นที่ซับซ้อน

4 หัวข้อคำอธิบายในหน้านี้ภาพอธิบายและกลไกทีละส่วน
ควรรู้ก่อน: 13.2 โค้ดใช้ซ้ำ
หัวข้อในบทนี้
ศัพท์ในบทนี้ · กดคำที่ขีดเส้นใต้ในเนื้อหาเพื่อดูความหมายได้ด้วย
IP
ที่อยู่และโปรโตคอลส่ง packet ระหว่างเครือข่าย รุ่น IPv4 และ IPv6 มีรูปแบบต่างกัน
CSV
รูปแบบข้อมูลตารางข้อความที่มีกฎ delimiter และ quote
จากหลักการไปถึงกลไก

แปลงข้อความเป็นข้อมูลก่อนใช้กฎ

String เป็นลำดับอักขระ List เป็นลำดับรายการ Index ใน Python เริ่มที่ 0 ส่วน slice ใช้ขอบเริ่มรวมและขอบจบไม่รวม Algorithm เป็นขั้นตอนแก้ปัญหา Regex เป็นภาษาของรูปแบบข้อความ ทั้งหมดต้องทำงานกับ input ที่นิยามไว้ ไม่เดารูปแบบจากบรรทัดที่เห็นครั้งเดียว

ลำดับงาน · อ่านตามลูกศรแปลงข้อความเป็นข้อมูลก่อนใช้กฎ
  1. Raw string

    เช่น 'Ann,failed' ยังเป็นข้อความรวม ต้องรู้ delimiter และการ escape

  2. Parse

    แยกเป็น fields หรืออ่านด้วย parser ที่ตรงรูปแบบ ไม่ split CSV อย่างเดียวเมื่อมี quotes และ comma ในค่า

  3. Select

    ใช้ index หรือ slice เลือกส่วน เช่น [0:3] เลือกตำแหน่ง 0 1 2

  4. Match

    Regex หา pattern ต้องแยก search match และ fullmatch พร้อมขอบเขตที่ต้องการ

  5. Transform

    ปรับข้อมูลตาม algorithm แล้วตรวจว่าไม่ทำรายการหายหรือซ้ำโดยผิดเจตนา

slice เริ่มรวม จบไม่รวม
a · 0b · 1c · 2d · 3e · 4
'abcde'[1:4] → 'bcd'
start=1 รวม · stop=4 ไม่รวม

Index ติดลบอ้างจากท้ายตามกติกา และ slice เลยขอบมีพฤติกรรมต่างจากการอ่าน index เดี่ยวที่ไม่มีตำแหน่ง ตัวอย่างเริ่มจากขอบพื้นฐานก่อนใช้ step

Regex [0-9]+ พบตัวเลขต่อเนื่องไม่ได้ยืนยันว่าเป็น ที่ถูกต้องทั้งค่า และการลบสมาชิก list ระหว่างวนอาจข้ามบางรายการ String เปลี่ยนค่าในตำแหน่งเดิมไม่ได้แบบ list จึงสร้างข้อความใหม่ ส่วนชื่อหลายชื่อที่อ้าง list เดียวกันอาจเห็นการเปลี่ยนร่วมกัน

01 / 04

ข้อความและลิสต์Strings and Lists · 13.3.1

String เก็บข้อความ List เก็บลำดับรายการและปรับรายการได้

String เป็นข้อความที่แก้ในที่เดิมไม่ได้ List เป็นลำดับรายการที่แก้ได้ Methods มีผลต่างกัน บางตัวคืนค่าใหม่บางตัวแก้ object เดิม เช่น str.lower() คืนข้อความใหม่ ส่วน list.append() เพิ่มใน list

เทียบหน้าที่เพื่อไม่สับสน
•String

ข้อความและการคืนค่าใหม่

•List

ลำดับรายการที่เปลี่ยนได้

•Method behavior

คืนค่าใหม่หรือแก้ object

split แยกข้อความตาม delimiter แต่ ที่มี comma ใน quote ควรใช้ parser CSV ไม่ split แบบเดา การแก้ list ที่อ้างร่วมจากหลายชื่ออาจมีผลกับผู้ใช้ object เดียวกัน

parser รู้กฎข้อความ
import csv
from io import StringIO

rows = csv.reader(StringIO('name,note\nAlice,"IT, Support"'))
for row in rows:
    print(row)

csv reader เก็บ IT, Support เป็นหนึ่ง field เพราะมี quote หากใช้ split comma ตรงๆ จะได้จำนวน field ผิด

ที่มาของหัวข้อนี้ · 2 รายการ

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

02 / 04

ตำแหน่งและการตัดช่วงIndexing and Slicing · 13.3.2

Index อ้างตำแหน่ง Slice เลือกช่วง ต้องระวังจุดเริ่มและจุดสิ้นสุด

Index เริ่มจากศูนย์ใน Python Negative index นับจากท้าย Slice [start:stop:step] เก็บถึงก่อน stop ช่วงที่ไม่ระบุใช้ค่าเริ่มต้นตามทิศทาง step

เทียบหน้าที่เพื่อไม่สับสน
•Index

ตำแหน่งรายการเดียว

•Slice

ช่วงก่อน stop

•Bounds

ขอบเขตที่ข้อมูลมีจริง

items[1:3] เลือกตำแหน่งหนึ่งและสอง ไม่ใช่สาม items[-1] อ่านท้ายแต่ list ว่างเกิด error ระบุขอบเขตที่ต้องการและตรวจความยาวเมื่อข้อมูลอาจไม่ครบ

ตำแหน่งเริ่มที่ศูนย์
items = ["A", "B", "C", "D"]
print(items[0])
print(items[1:3])
print(items[-1])

ผลคือ A จาก index 0 แล้ว [B, C] จาก slice ที่หยุดก่อน index 3 และ D จากตำแหน่งสุดท้าย

ที่มาของหัวข้อนี้ · 1 รายการ

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

03 / 04

ขั้นตอนวิธีAlgorithms · 13.3.3

Algorithm เป็นขั้นตอนแก้ปัญหา ต้องพิจารณาความถูกต้องและต้นทุนเมื่อข้อมูลเพิ่ม

Algorithm เป็นขั้นตอนแก้ปัญหาจาก input ไป output เลือกโครงสร้างข้อมูลให้เข้ากับงาน เช่น set สำหรับสมาชิกไม่ซ้ำ dict สำหรับค้นจาก key ประสิทธิภาพขึ้นกับจำนวนข้อมูลและวิธีทำ

อ่านภาพตามลำดับการทำงาน
01Input

ข้อมูลและเงื่อนไขตั้งต้น

02Procedure

ขั้นตอนและโครงสร้างที่เลือก

03Output

ผลตามกฎที่ต้องการ

หาผู้ใช้ที่อนุญาตจาก list ซ้ำทุก event อาจทำงานมากกว่าการแปลง allowlist เป็น set แล้วตรวจสมาชิก ต้องรักษาความหมาย เช่น set ไม่เก็บรายการซ้ำที่อาจมีความหมายต่อการนับ

ที่มาของหัวข้อนี้ · 1 รายการ

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

04 / 04

รูปแบบค้นหาข้อความRegular Expressions · 13.3.4

Regex อธิบายรูปแบบข้อความที่ต้องการหา ไม่ใช่เครื่องมือแทน parser ทุกชนิด

Regex เป็น pattern จับรูปแบบข้อความ Literal ตรงตัว character class เลือกตัวอักษร quantifier ระบุจำนวน anchor ระบุขอบ เช่น ^ ต้นและ $ ท้าย การ match ไม่เท่ากับตรวจความหมายของข้อมูลครบ

เทียบหน้าที่เพื่อไม่สับสน
•Pattern

รูปแบบอักขระที่ต้องการ

•Match / groups

ส่วนข้อความที่พบ

•Validation

ตรวจความหมายหลังจับรูปแบบ

pattern ที่จับเลขกับจุดอาจยอมรับ 999.999.999.999 ต้องใช้ตัวตรวจ IP เพิ่ม Regex บางแบบมีต้นทุนสูงกับ input แปลก จึงจำกัดขนาด input และใช้ parser เฉพาะชนิดเมื่อเหมาะ

Pattern Matching versus Validation (พบรูปแบบ กับรับรองข้อมูล)

Regex [0-9]+ หาเลขต่อเนื่องได้ แต่ไม่ได้ยืนยันว่าเป็นจำนวนที่อยู่ในขอบเขตงาน ส่วนรูปแบบคล้าย IPv4 ที่ยอมรับเลขสามหลักทุกชุดอาจยอมรับ 999.999.999.999 ซึ่งไม่ใช่ octets ที่ถูกต้อง ต้องตรวจ semantics เพิ่มด้วย parser หรือกฎที่เหมาะ

Search หาจุดที่ match ในข้อความ ส่วน fullmatch ต้องครอบคลุมทั้งข้อความตามวิธี Python Raw string ช่วยเขียน backslashes ของ pattern แต่ไม่ได้ทำให้ input ปลอดภัยโดยอัตโนมัติ Regex ที่ซับซ้อนกับ input ยาวอาจมีต้นทุนสูง ต้องเลือก pattern และขอบเขตข้อมูลตามงาน

จับรูปแบบก่อนตรวจความหมาย
import re

text = "device=PC-12 status=failed"
match = re.search(r"device=(PC-\d+)", text)
if match:
    print(match.group(1))

ผลเป็น PC-12 วงเล็บสร้างกลุ่ม d แบบ escape จับ digit และ + ให้หนึ่งตัวขึ้นไป หากชื่ออุปกรณ์มีรูปแบบอื่น pattern นี้จะไม่พบ ต้องกำหนดรูปแบบตามข้อมูลจริง

ที่มาของหัวข้อนี้ · 1 รายการ

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

เชื่อมความเข้าใจ

นำศัพท์มาเชื่อมกับงาน

ตัวอย่างให้เห็นภาพ

แยกข้อความ log เป็นรายการ แล้วค่อยหา IP หรือสถานะตามรูปแบบที่กำหนด

สิ่งที่บทนี้เชื่อมไว้

ข้อมูลที่อ่านมามักต้องแยก ค้น หรือจัดลำดับ เข้าใจโครงสร้างก่อนใช้รูปแบบค้นที่ซับซ้อน

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

บันทึกในเบราว์เซอร์นี้
บทเรียนที่เกี่ยวข้องและที่มาของบทอ่าน

transcript ที่เคยใช้ตรวจแนวคิดพื้นฐานและตัวอย่างบางส่วน: T0071 · Automate Cybersecurity Tasks with Python คำอธิบายเป็นการเขียนใหม่ ไม่ใช่การแปลครบทุกประโยค ภาพและตัวอย่างเป็นการเรียบเรียงเพื่อเชื่อมความเข้าใจ

คำอธิบายหน้านี้เขียนใหม่ตามหัวข้อใน Atlas รายการด้านล่างเป็นชื่อ Video/Reading ที่เคยจับคู่ไว้ แสดงไว้ให้ตรวจที่มาของชื่อหัวข้อ และไม่รับรองว่าคอร์สสอนทุกส่วนของคำอธิบายนี้

Python · Tutorial ↗