[Python-Dev] RFC: PEP 460: Add bytes % args and bytes.format(args) to Python 3.5

R. David Murray rdmurray at bitdance.com
Sat Jan 11 21:40:43 CET 2014


On Sat, 11 Jan 2014 11:54:26 -0800, Ethan Furman <ethan at stoneleaf.us> wrote:
> On 01/11/2014 11:49 AM, Stephen J. Turnbull wrote:
> > MRAB writes:
> >
> >   > > with open("outfile.pdf", "w", encoding="latin-1") as f:
> >   > >      f.write(pdf)
> >   > >
> >   > [snip]
> >   > The second example won't work because you're forgetting about the
> >   > handling of line endings in text mode.
> >
> > Not so fast!  Forgot, yes (me too!), but not work?  Not quite:
> >
> >      with open("outfile.pdf", "w", encoding="latin-1", newline="") as f:
> >          f.write(pdf)
> >
> > should do the trick.
> 
> Well, it's good that there is a work-a-round.  Are we going to have a document listing all the work-a-rounds needed to 
> program a bytes-oriented style using unicode?

That's not a work-around (if you are talking specifically about the
newline="").  That's just the way the python3 IO library works.  If you
want to preserve the newlines in your data, but still have the text-io
machinery count them for deciding when to trigger io/buffering behavior,
you use newline=''.

It's not the most intuitive API, so I won't be surprised if a lot of
people don't know about it or get confused by it when they see it.
I first learned about it in the context of csv files, another one of
those legacy file protocols that are mostly-text-but-not-entirely.

--David


More information about the Python-Dev mailing list