Bir değişken atanmadan pythondaki bir dosya nasıl kapatılır

Bu şekilde açtıktan sonra python'daki bir dosyayı nasıl kapatırım:

satır = açık ("file.txt", "r") readlines() [7]

6
Yapmıyorsun. Python'un sizin için çöp toplama sırasında veya program bittiğinde sizin için kapatmasına izin verdiniz. Genellikle bu bir sorun değildir, bu nedenle Python belgelerinde yer alan birçok kod örneği bu şekilde yapılır.
katma yazar Tim Pietzcker, kaynak
@eryksun: Hayır buna güvenemezsin! Dosya nesnesiniz, bir referans döngüsünün bir parçası olabilir; bu durumda, ciltleme kapsam dışına çıktığında yok olmaz. Daha sonra, döngüsel çöp toplayıcının geleceğe çok uzun süre dayanabilecek olana kadar yaşayacaktır.
katma yazar Björn Lindqvist, kaynak
@Tim Pietzcker: CPython'da referans sayımına güvenebilirsiniz, ancak PyPy veya Jython gibi diğer uygulamalarda çalışmayan bir uygulama detayıdır. Bu durumda çok fazla dosya açmak mevcut dosya tanımlayıcılarını tüketebilir.
katma yazar eryksun, kaynak
katma yazar unni, kaynak

2 cevap

Bir içerik yöneticisi kullanmak en iyisidir. Bu, bloğun sonunda otomatik olarak dosyayı kapatacak ve garbarge koleksiyonunun uygulama ayrıntılarına dayanmayacaktır.

with open("file.txt", "r") as f:
    line = f.readlines()[7]
5
katma
@Tim Pietzcker aşağıda yazdı. Ben ancak ben dosya instance'a bir değişken atamadan, başlığında belirtildiği gibi, bu çevrede başka bir yolu olup olmadığını merak, bu yöntemin farkındayım.
katma yazar 0sh, kaynak

Birkaç yol vardır, örneğin sadece f = open (...) ve del f kullanabilirsiniz.

Python sürümünüz destekliyorsa, with deyimini de kullanabilirsiniz:

with open("file.txt", "r") as f:
    line = f.readlines()[7]

Bu otomatik olarak dosyanızı kapatır.

EDIT: I don't get why I'm downvoted for explaining how to create a correct way to deal with files. Maybe "without assigning a variable" is just not preferable.

1
katma
Açıkça bir değişken atamadan nasıl yapılacağını sorar.
katma yazar Tim Pietzcker, kaynak