เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

เขียน generator เพื่อโหลดข้อมูลทีละส่วน (2)

ในแบบฝึกหัดก่อนหน้า คุณได้ประมวลผลไฟล์ทีละบรรทัดสำหรับจำนวนบรรทัดที่กำหนด แต่ถ้าต้องการทำแบบนี้กับทั้งไฟล์ล่ะ?

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

ในแบบฝึกหัดนี้ คุณจะเขียนฟังก์ชัน generator ชื่อ read_large_file() ซึ่งสร้าง generator object ที่ yield ข้อมูลทีละบรรทัดจากไฟล์ทุกครั้งที่เรียก next() ไฟล์ CSV 'world_dev_ind.csv' อยู่ในไดเรกทอรีปัจจุบันพร้อมให้ใช้งานแล้ว

สังเกตว่าเมื่อเปิดการเชื่อมต่อกับไฟล์ ออบเจกต์ไฟล์ที่ได้จะเป็น generator อยู่แล้ว! ดังนั้นในการใช้งานจริง คุณไม่จำเป็นต้องสร้าง generator object อย่างชัดเจนในกรณีเช่นนี้ อย่างไรก็ตาม เพื่อเป็นการฝึกทักษะ เราจึงให้คุณฝึกเขียนด้วยฟังก์ชัน read_large_file() นี้ ลองทำดูเลย!

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

Python Toolbox

ดูคอร์ส

คำแนะนำการฝึกหัด

  • ในฟังก์ชัน read_large_file() ให้อ่านหนึ่งบรรทัดจาก file_object โดยใช้เมธอด readline() แล้วกำหนดผลลัพธ์ให้กับ data
  • ในฟังก์ชัน read_large_file() ให้ yield บรรทัดที่อ่านได้จากไฟล์ data
  • ใน context manager ให้สร้าง generator object ชื่อ gen_file โดยเรียกฟังก์ชัน generator read_large_file() และส่ง file เข้าไป
  • พิมพ์สามบรรทัดแรกที่ได้จาก generator object gen_file โดยใช้ next()

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

# Define read_large_file()
def read_large_file(file_object):
    """A generator function to read a large file lazily."""

    # Loop indefinitely until the end of the file
    while True:

        # Read a line from the file: data
        data = ____

        # Break if this is the end of the file
        if not data:
            break

        # Yield the line of data
        
        
# Open a connection to the file
with open('world_dev_ind.csv') as file:

    # Create a generator object for the file: gen_file
    gen_file = ____

    # Print the first three lines of the file
    print(____)
    print(____)
    print(____)
แก้ไขและรันโค้ด