with open(infile,'r') as fin, open(outfile,'w') as fout:
fout.write(fin.read())
It used to be necessary to use (the now deprecated) contextlib.nested, but as of Python2.7, with
supports multiple context managers.
题
Normally, we would use this to read/write a file:
with open(infile,'r') as fin:
pass
with open(outfile,'w') as fout:
pass
And to do read one file and output to another, can i do it with just one with
?
I've been doing it as such:
with open(outfile,'w') as fout:
with open(infile,'r') as fin:
fout.write(fin.read())
Is there something like the following, (the follow code dont work though):
with open(infile,'r'), open(outfile,'w') as fin, fout:
fout.write(fin.read())
is there any benefit to using one with
and not multiple with
? is there some PEP where it discusses this?
解决方案
with open(infile,'r') as fin, open(outfile,'w') as fout:
fout.write(fin.read())
It used to be necessary to use (the now deprecated) contextlib.nested, but as of Python2.7, with
supports multiple context managers.
其他提示
You could try writing your own class and use it with with
syntax
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')