ไฟล์ปิดเมื่อใด
ในขณะที่เราสามารถเรียนรู้จากการปิดไฟล์สำคัญหรือไม่ (StackOverflow) Python interpreter ปิดไฟล์ในกรณีต่อไปนี้:
- คุณเรียกใช้
close()
วิธีการของfile
วัตถุด้วยตนเองอย่างชัดเจนหรือโดยปริยายโดยออกจากwith open(...):
บล็อก แน่นอนว่าใช้ได้ผลเสมอและในทุกการใช้งานของ Python
- การ
file
อ้างอิงครั้งสุดท้ายของวัตถุถูกลบและดังนั้นวัตถุจะได้รับการประมวลผลโดย Garbage Collector นี่ไม่ใช่คุณสมบัติภาษา แต่เป็นคุณสมบัติพิเศษของการติดตั้ง CPython เท่านั้นดังนั้นเพื่อความสะดวกในการพกพาอย่าพึ่งพาสิ่งนี้!
- ล่าม Python สิ้นสุดลง ในกรณีนี้ควรปิดตัวจัดการไฟล์ทั้งหมดที่เปิดขึ้นมา Python3 เวอร์ชั่นเก่าบางรุ่นจะพิมพ์คำเตือนด้วยว่าคุณควรปิดมันด้วยตนเอง อย่างไรก็ตามลองจินตนาการว่าเกิดความผิดพลาดหรือคุณบังคับให้ล่าม Python และคุณจะเห็นว่าสิ่งนี้ไม่น่าเชื่อถือ
ดังนั้นวิธีแรกเท่านั้น (ด้วยตนเอง) จึงเชื่อถือได้!
จะเกิดอะไรขึ้นหากไฟล์เปิดอยู่
ก่อนอื่นขึ้นอยู่กับการใช้งานล่าม Python ของคุณหากคุณเปิดไฟล์ที่มีการเข้าถึงแบบเขียนคุณไม่สามารถแน่ใจได้ว่าการแก้ไขของคุณถูกฟลัชไปที่ดิสก์จนกว่าคุณจะชักจูงด้วยตนเองหรือตัวจัดการไฟล์ถูกปิด
ประการที่สองคุณสามารถเปิดไฟล์ได้ในจำนวนที่ จำกัด ในระบบของคุณต่อผู้ใช้ หากคุณเกินขีด จำกัด นี้เช่นเปิดหลายไฟล์ในลูปในโปรแกรม Python ของคุณโดยไม่ต้องปิดโดยเร็วที่สุดระบบอาจปฏิเสธที่จะเปิดการจัดการไฟล์เพิ่มเติมสำหรับคุณและคุณจะได้รับการยกเว้น อาจเกิดขึ้นได้ว่าโปรแกรมของคุณใช้ไฟล์เปิดล่าสุดที่อนุญาตและอีกโปรแกรมหนึ่งจะล้มเหลวเนื่องจากได้รับการปฏิเสธ
ประการที่สามไฟล์ที่เปิดอยู่บนอุปกรณ์พกพาจะป้องกันไม่ให้ถอดออกหรือถอดออก คุณยังคงสามารถลบไฟล์ในระบบไฟล์บางระบบเช่นext4
ที่ไฟล์ descriptor / ฮาร์ดลิงก์ไปยัง inode ของไฟล์ถูกลบ / ยกเลิกการเชื่อมโยง แต่โปรแกรมที่เปิดไฟล์อาจยังเข้าถึง inode ผ่านตัวจัดการไฟล์ชั่วคราวของมันเอง นี่คือกลไกที่ช่วยให้คุณสามารถอัปเดตแพ็คเกจในขณะที่ซอฟต์แวร์นั้นทำงานอยู่ อย่างไรก็ตามเช่น NTFS ไม่มีคุณสมบัติดังกล่าว อย่างไรก็ตามอาจไม่เคยได้รับการแก้ไขโดยสองกระบวนการที่เกิดขึ้นพร้อมกันดังนั้นมันจะถูกบล็อกอย่างใดอย่างหนึ่งสำหรับผู้อื่น
with open (file_name, ...) as variable:
เรียกใช้close()
เมธอดโดยอัตโนมัติทันทีที่คุณออกจากบล็อกรหัสนี้