2010-03-08 17 views

cevap

17

Bu dosyanın __del__ açıklamada dosya tanıtıcısı kapatmak gerekir, ancak daha iyi bir yaklaşım with blok kullanmak olacaktır:

def read_contents(file_path): 
    with open(file_path, 'r') as f: 
    return f.read() 

fazla bilgi için http://docs.python.org/library/stdtypes.html#file.close bakınız.

+0

Sadece şunu belirtin: dosya, yakın bir yöntemi olan bir dosya nesnesini döndürür. Bu en düz ileriye doğru çözüm olurdu, ama "ile" açıkçası daha güzel olanıdır. – Achim

+0

Bir sorunum var - Python'umda "ile" yok. Gelecekden ithal etmek doğru mu? Python 2,5'im var. – bodacydo

+0

Eğer Python 2.5'iniz varsa, o zaman evet. –

28

FogleBird'in yanıtını genişletmek için, açık bir şekilde kapatmazsanız, dosya nesnesi yok olduğunda dosya otomatik olarak kapanır. CPython'da bu, daha fazla referans bulunmadığı anda olur, ör. Bir fonksiyonda yerel değişken ise ve fonksiyon biter. bir özel fonksiyon atılır ve dosya açıkça daha sonra dosyaya atıf traceback nesne ve dosyada yığın izleme parçası olarak muhafaza edilecek olan with deyimi veya bir try:...finally: kullanılarak kapatılmazsa Ancak eğer, kapalı olmayacak en az bir istisna atılana kadar.

Ayrıca IronPython ve Jython sırasıyla .Net CLR ve Java JVM çöp toplama tesisleri kullanmak. Bunlar referans sayılmaz, bu nedenle çöp toplayıcı nesnenin belleğini geri almaya veya program sona erdirmeye karar verene kadar dosya süresiz olarak açık kalacaktır. Genel olarak, dosyayı with: veya try:...finally: kullanarak açıkça kapatmak önemlidir. Bütün bunların Tabii

açık temizleme gerektiren nesnenin başka tür için de geçerlidir.

+1

+1, bahsetmek istemediğim tüm iyi noktaları. :) – FogleBird

+1

"rahatsız etmedim" - bunların hiçbirini bilmiyordum. :( – bodacydo

+0

Tüm bu önemli noktaları belirtdiğiniz için teşekkür ederiz! – bodacydo

İlgili konular