Aynı anda birkaç dosya içerisinde değişiklik yapmak istiyoruz. Ancak bu değişikliği yapmamızın koşulu olarak, değişikliği hepsinde yapıyorsak yapmak istiyoruz. Eğer böyle bir koşulumuz olmasaydı basit bir döngü ile işlerimizi halledebilirdik. Daha basit ifade ile birden fazla “open with” çağrısını birleştirip birleştiremeyeceğimizi merak ediyoruz:
try:
with open('a', 'w') as a and open('b', 'w') as b:
bir_seyler_yap()
except IOError as e:
print 'Operation failed: %s' % e.strerror
open kullanırken başvurduğumuz dosya modlarını hatırlamak için buraya bakabilirsiniz.
Python 2.7 (ve 3.1) itibariyle aşağıdaki gibi bir kod parçası yazabiliyoruz:
with open('a', 'w') as a, open('b', 'w') as b:
bir_seyler_yap()
Python’un önceki sürümlerinde, bağlam yöneticilerini iç içe yerleştirmek için contextlib.nested()
‘i kullanabilirsiniz. Ancak bu, birden fazla dosyayı açmak için beklendiği gibi çalışmayacaktır — ayrıntılar için linke bakın lütfen.
Aynı anda değişken sayıda dosya açmak istediğiniz nadir durumlarda, Python 3.3’ten itibaren contextlib
.ExitStack
‘i kullanabilirsiniz. :
with ExitStack() as stack:
files = [stack.enter_context(open(fname)) for fname in filenames]
# açtığımız dosyalarla bir şeyler yap
Çoğu zaman değişken bir dosya kümeniz vardır, ancak bunları birbiri ardına açmak istersiniz.