วันอังคารที่ 17 มกราคม พ.ศ. 2560

การเก็บข้อมูลแบบ CSV

        SPN ได้บอกว่าถ้าหากนำการเขียนเว็บแบบ Dynamic มาใช้ในการเก็บข้อมูลว่าคนที่เข้าใช้เว็บไซต์ของเรานั้นเกิดวันไหนบ้าง แล้วเก็บเป็นสถิติเอาไว้ เราจะมีวิธีการเก็บข้อมูลอย่างไร โดยอาจารย์ได้แนะนำให้ลองใช้ CSV File ในการเก็บข้อมูล โดยในการทำงานได้ไปค้นคว้าข้อมูลจาก https://docs.python.org/3/library/csv.html ซึ่งมีประโยชน์อย่างมากถึงมากที่สุด หน้าตาของเว็บไซต์ที่เสร็จแล้วจะหน้าตาประมาณนี้


        เวลาจะใช้งานก็ติ๊กว่าเกิดวันไหนตามดังนี้แล้วก็กด Submit แล้วจะไปดึงไฟล์ Python มารันโปรแกรมที่ได้เขียนเอาไว้ โดยหน้าตาจะเป็นแบบนี้


HTML Code


ส่งค่า key ให้เป็นตัวย่อของวันต่างๆไปให้กับ ไฟล์ python เพื่อทำการคำนวณ

Python Code


    ในไฟล์ python จะ import cgi กับ csv มาโดยจะมีการรับค่า key ที่จะรับมาเป็นตัวย่อของแต่ละวันเข้ามาเพื่อทำการคำนวณ เริ่มแรกก็จะทำการเปิดไฟล์ days.csv โดยใช้คำสั่ง DictReader() โดยจะเปิดแบบ r หรือ read only หลังจากนั้นก็จะเก็บข้อมูลไว้ในลิสต์ 2 ชุด ชุดแรกจะเก็บ keyword หรือตัวย่อ ของแต่ละวันในไฟล์ csv ไปใส่ในลิสต์ อีกชุดจะเอาไว้เก็บชุดตัวเลขที่เป็นจำนวนคนที่เกิดในวันนั้นๆ หน้าตา default ของไฟล์ csv จะเป็นดังนี้


    การใช้คำสั่ง csv.DictReader() และ csv.DictWriter() จะแตกต่างกับการ write และ read ธรรมดาตรงที่จะมีส่วนของหัว (fieldnames) มาเป็นตัวกำหนดคอลัมน์ โดยในงานนี้จะเป็น d , number ดังรูปภาพด้านบน หลังจากที่เก็บข้อมูลแล้วก็จะมีการสร้างลูปเพื่อเช็คว่า key ที่รับมานั้นตรงกับ key ในลิสต์วันไหน โดย date จะเป็น list ที่เก็บวัน และ number จะเป็น list ที่เก็บจำนวนคน


    โดยถ้าหากตัวแปร days ที่เป็นตัวแปรที่รับค่า key มาจากไฟล์ html ตรงกับวันใดก็จะให้บวกจำนวนคนเพิ่มขึ้นไปซึ่งจะเป็น index ตัวเดียวกัน 

    ขั้นตอนสุดท้ายจะเป็นการเขียนทับไฟล์ csv เพื่อไว้ใช้ในการคำนวณครั้งต่อไป


    ปัญหาที่พบในการเขียนไฟล์คือในการเขียนแบบ DictWriter เมื่อเขียนไปแล้วส่วนหัวจะหายไปหรือ d,number จะหายไปทำให้การอ่านไฟล์ นั้นจะไม่สามารถอ่านได้ ก็เลยทำการเขียนในส่วนหัว แล้วก็วนลูบเขียนในส่วนเนื้อหาแยกส่วนกัน


    ในส่วนของโค้ด html ก็จะให้แสดงวันแล้วก็จำนวน โดยจะเอา list number มาใส่ให้ตรงกับวันเป็นอันเสร็จสิ้น










ไม่มีความคิดเห็น:

แสดงความคิดเห็น