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

Context manager แบบ open() อ่านอย่างเดียว

คุณมีไฟล์ข้อมูลจำนวนมากสำหรับโปรเจกต์ deep learning ที่ใช้เวลาหลายเดือนในการรวบรวมและทำความสะอาด คงจะแย่มากหากเขียนทับไฟล์เหล่านั้นโดยไม่ตั้งใจขณะพยายามอ่านเพื่อนำไปเทรนโมเดล ดังนั้นจึงตัดสินใจสร้าง context manager ของ open() แบบอ่านอย่างเดียวสำหรับใช้ในโปรเจกต์นี้

โดยปกติ open() context manager จะ:

  • รับชื่อไฟล์และโหมด ('r' สำหรับอ่าน, 'w' สำหรับเขียน หรือ 'a' สำหรับต่อท้าย)
  • เปิดไฟล์เพื่ออ่าน เขียน หรือต่อท้าย
  • ส่งการควบคุมกลับไปยัง context พร้อมกับการอ้างอิงไปยังไฟล์
  • รอให้ context ทำงานเสร็จ
  • แล้วจึงปิดไฟล์ก่อนออก

Context manager ที่จะสร้างนี้ทำงานแบบเดียวกัน ต่างกันตรงที่รับเฉพาะชื่อไฟล์เป็น argument และเปิดไฟล์เพื่ออ่านเท่านั้น

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

การเขียนฟังก์ชันใน Python

ดูคอร์ส

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

  • ส่งการควบคุมจาก open_read_only() ไปยัง context block โดยให้ออบเจกต์ read_only_file ถูกกำหนดให้กับ my_file
  • ใช้เมธอด .close() ของ read_only_file เพื่อให้แน่ใจว่าไม่มีไฟล์ที่เปิดค้างอยู่

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

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

@contextlib.contextmanager
def open_read_only(filename):
  """Open a file in read-only mode.

  Args:
    filename (str): The location of the file to read

  Yields:
    file object
  """
  read_only_file = open(filename, mode='r')
  # Yield read_only_file so it can be assigned to my_file
  ____ ____
  # Close read_only_file
  ____.____()

with open_read_only('my_file.txt') as my_file:
  print(my_file.read())
แก้ไขและรันโค้ด