Timo wrote: > Op 09-09-15 om 15:41 schreef Steven D'Aprano: >> On Wed, Sep 09, 2015 at 09:05:23AM -0400, richard kappler wrote: >>> Would either or both of these work, if both, which is the better or more >>> Pythonic way to do it, and why? >> The first works, but isn't really the best way to do it: >> >>> ####################### >>> >>> import whatIsNeeded >>> >>> writefile = open("writefile", 'a') >>> >>> with open(readfile, 'r') as f: >>> for line in f: >>> if keyword in line: >>> do stuff >>> f1.write(line) >>> else: >>> f1.write(line) >>> >>> writefile.close() >>> >>> ###################### >> Better would be this: >> >> with open("writefile", 'a') as outfile: >> with open("readfile", 'r') as infile: >> for line in infile: >> if keyword in line: >> do stuff >> outfile.write(line) >> > It's also possible to use multiple with statements on the same line. Can > someone with more expert Python knowledge than me comment on whether > it's different from using them separate as mentioned by Steven? > > This is what I had in mind: > > with open("writefile", 'a') as outfile, open("readfile", 'r') as infile: > pass # Rest of the code here
This requires Python 2.7 or higher. Other than that the choice is merely a matter of taste. Both versions even produce the same bytecode: $ cat nested_with.py def f(): with open("writefile", 'a') as outfile, open("readfile", 'r') as infile: pass # Rest of the code here def g(): with open("writefile", 'a') as outfile: with open("readfile", 'r') as infile: pass # Rest of the code here print(f.__code__.co_code == g.__code__.co_code) $ python nested_with.py True Personally I find one item per with statement more readable and don't care about the extra indentation level. _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor