SORU
13 EYLÜL 2011, Salı


Python okuma tüm dosya

Eğer okuduysanız content = open('Path/to/file', 'r').read() ile tüm dosya, komut dosyası çıkar kadar açma kolu sol mu? Daha kısa bir yöntem tüm dosya okumak var mı?

CEVAP
13 EYLÜL 2011, Salı


bu sorunun cevabı biraz özellikle python uygulamasına bağlıdır.

Bu tüm hakkında ne olduğunu anlamak için, file gerçek nesne özellikle dikkat edin. Kodunuzda, bu nesne sadece bir kez, bir ifadede belirtilen ve ulaşılmaz derhal read() çağrı döndükten sonra olur.

Bu dosya, nesne çöp olduğu anlamına gelir. Geriye kalan tek soru "ne Zaman garbage collecter dosya nesnesi toplayacak?".

sayaç bir referans kullanan CPython, çöp bu tür hemen fark edilir ve bu yüzden hemen tahsil edilecektir. Bu genellikle diğer python uygulamaları doğru değildir.

Daha iyi bir çözüm, dosya kapalı olduğundan emin olmak için, bu model

with open('Path/to/file', 'r') as content_file:
    content = content_file.read()

her zaman blok bittikten sonra; eğer bir durum oluşursa bile dosyayı hemen kapatmak olacak.

Edit: üzerine: ince bir nokta koymak İçin

Başka file.__exit__() olan "otomatik olarak" adı verilen bir with içerik yöneticisi ayarı, sadece başka bir yol olduğunu file.close() otomatik olarak (yani, başka açıkça arama Kendin)) file.__del__(). Bu zaman __del__() aradı mı? sorusuna götürür bizi

Doğru yazılmış bir program olamaz sonlandırıcı şimdiye kadar herhangi bir noktada program sonlanması önce çalışır varsayalım.

-- http://blogs.msdn.com/b/oldnewthing/archive/2010/08/09/10047586.aspx

Özellikle:

Nesneleri açık bir şekilde yok edilir; ulaşılmaz olduklarında ancak, çöp toplama olabilir.Bir uygulama çöp toplama ertelemek veya tümüyle atlamak için izin verilir— nesneleri hala ulaşılabilir olduğunu toplanır sürece nasıl uygulanır uygulama kalite meselesidir.

[...]

CPython şu anda kullandığı bir referans sayma düzeni (isteğe bağlı) gecikmeli algılama döngüsel bağlı çöp, hangi toplar nesneleri en kısa sürede olurlar ulaşılamaz, ama değil garantili toplamak için çöp içeren döngüsel başvurular.

-- https://docs.python.org/3.5/reference/datamodel.html#objects-values-and-types

(Vurgu benim)

ama anlaşılacağı gibi, diğer uygulamalar diğer davranış olabilir. Örnek olarak, has 6 different garbage collection implementations PyPy!

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AFISHAL

    AFISHAL

    7 Mart 2009
  • GenTechPC

    GenTechPC

    1 Temmuz 2007
  • Jeremy Stark

    Jeremy Stark

    23 Mayıs 2010