Ответ 1
with open(infile,'r') as fin, open(outfile,'w') as fout:
fout.write(fin.read())
Раньше это было необходимо использовать (теперь устарело) contextlib.nested, но с Python2.7 with
поддерживает несколько контекстных менеджеров.
Обычно мы будем использовать это для чтения/записи файла:
with open(infile,'r') as fin:
pass
with open(outfile,'w') as fout:
pass
И чтобы читать один файл и выводить его на другой, могу ли я сделать это только с одним with
?
Я делал это как таковое:
with open(outfile,'w') as fout:
with open(infile,'r') as fin:
fout.write(fin.read())
Есть ли что-то вроде следующего (следующий код не работает):
with open(infile,'r'), open(outfile,'w') as fin, fout:
fout.write(fin.read())
Есть ли какая-либо польза от использования одного with
, а не нескольких with
? есть ли там PEP, где это обсуждается?
with open(infile,'r') as fin, open(outfile,'w') as fout:
fout.write(fin.read())
Раньше это было необходимо использовать (теперь устарело) contextlib.nested, но с Python2.7 with
поддерживает несколько контекстных менеджеров.
Вы можете попробовать написать свой собственный класс и использовать его с синтаксисом with
class open_2(object):
def __init__(self, file_1, file_2):
self.fp1 = None
self.fp2 = None
self.file_1 = file_1
self.file_2 = file_2
def __enter__(self):
self.fp1 = open(self.file_1[0], self.file_1[1])
self.fp2 = open(self.file_2[0], self.file_2[1])
return self.fp1, self.fp2
def __exit__(self, type, value, traceback):
self.fp1.close()
self.fp2.close()
with open_2(('a.txt', 'w'), ('b.txt', 'w')) as fp:
file1, file2 = fp
file1.write('aaaa')
file2.write('bbb')