Path: csiph.com!usenet.pasdenom.info!weretis.net!feeder1.news.weretis.net!news.swapon.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Neil Cerutti Newsgroups: comp.lang.python Subject: Re: semicolon at end of python's statements Date: 3 Sep 2013 20:00:47 GMT Organization: Norwich University Lines: 35 Message-ID: References: <1377735506.18906.15.camel@debian> <1FETt.52607$Mw4.14965@fx15.am4> <7wob8gywds.fsf@benfinney.id.au> <52213435$0$6599$c3e8da3$5496439d@news.astraweb.com> <522446ae$0$2743$c3e8da3$76491128@news.astraweb.com> <52245E2F.4020909@rece.vub.ac.be> <52246BAD.9050403@gmail.com> <52246F4F.7080108@rece.vub.ac.be> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Trace: individual.net wI50/eH3+FY0wac9UFCBdgdQn+T8jWxPSLqKtaKNv+2ELU/vOV Cancel-Lock: sha1:yW0Cp33XwM5iMigbOzUQJvoxg1I= User-Agent: slrn/0.9.9p1/mm/ao (Win32) Xref: csiph.com comp.lang.python:53577 On 2013-09-03, Neil Cerutti wrote: > 3.2 and above provide contextlib.ExitStack, which I just now > learned about. > > with contextlib.ExitStack() as stack: > _in = stack.enter_context(open('some_file')) > _out = stack.enter_context(open('another_file', 'w')) > > It ain't beautiful, but it unfolds the nesting and gets rid of > the with statement's line-wrap problems. It just occurred to me that in most of my use cases ExitStack saves me from coming up with a name for the file objects at all, since they are needed only to make csv objects. Here's a csv file transformer pattern: import contextlib import csv import transform with contextlib.ExitStack() as stack: reader = csv.DictReader(stack.enter_context(open('some_file', newline=''))) writer = csv.DictWriter( stack.enter_context(open('another_file', 'w', newline='')), fieldnames=reader.fieldnames) writer.writeheader() for record in reader: writer.writerow(transform.transform(record)) Too bad it's so dense looking. -- Neil Cerutti