[Tutor] Python file escaping issue?

Sithembewena Lloyd Dube zebra05 at gmail.com
Mon Feb 22 20:30:40 CET 2010


Wow, thank you Steve. This certainly answers a few questions i've had
simmering for a while.

On Mon, Feb 22, 2010 at 1:01 AM, Steven D'Aprano <steve at pearwood.info>wrote:

> On Mon, 22 Feb 2010 05:22:10 am Sithembewena Lloyd Dube wrote:
> > Hi all,
> >
> > I'm trying to read a file (Python 2.5.2, Windows XP) as follows:
> >
> > assignment_file = open('C:\Documents and Settings\coderoid\My
> > Documents\Downloads\code_sample.txt', 'r+').readlines()
> > new_file = open(new_file.txt, 'w+')
> > for line in assignment_file:
> >     new_file.write(line)
> >
> > new_file.close()
> > assignment_file.close()
> >
> > When the code runs, the file path has the slashes converted to double
> > slashes. When  try to escape them, i just seemto add more slashes.
> > What am i missing?
>
> An understanding of how backslash escapes work in Python.
>
> Backslashes in string literals (but not in text you read from a file,
> say) are used to inject special characters into the string, just like C
> and other languages do. These backslash escapes include:
>
> \t tab
> \n newline
> \f formfeed
> \\ backslash
>
> and many others. Any other non-special backslash is left alone.
>
> So when you write a string literal including backslashes and a special
> character, you get this:
>
> >>> s = 'abc\tz'  # tab
> >>> print s
> abc     z
> >>> print repr(s)
> 'abc\tz'
> >>> len(s)
> 5
>
> But if the escape is not a special character:
>
> >>> s = 'abc\dz'  # nothing special
> >>> print s
> abc\dz
> >>> print repr(s)
> 'abc\\dz'
> >>> len(s)
> 6
>
> The double backslash is part of the *display* of the string, like the
> quotation marks, and not part of the string itself. The string itself
> only has a single backslash and no quote marks.
>
> So if you write a pathname like this:
>
> >>> path = 'C:\datafile.txt'
> >>> print path
> C:\datafile.txt
> >>> len(path)
> 15
>
> It *seems* to work, because \d is left as backlash-d. But then you do
> this, and wonder why you can't open the file:
>
> >>> path = 'C:\textfile.txt'
> >>> print path
> C:      extfile.txt
> >>> len(path)
> 14
>
>
> Some people recommend using raw strings. Raw strings turn off backslash
> processing, so you can do this:
>
> >>> path = r'C:\textfile.txt'
> >>> print path
> C:\textfile.txt
>
> But raw strings were invented for the regular expression module, not for
> Windows pathnames, and they have a major limitation: you can't end a
> raw string with a backslash.
>
> >>> path = r'C:\directory\'
>  File "<stdin>", line 1
>    path = r'C:\directory\'
>                          ^
> SyntaxError: EOL while scanning single-quoted string
>
>
> The best advice is to remember that Windows allows both forward and
> backwards slashes as the path separator, and just write all your paths
> using the forward slash:
>
> 'C:/directory/'
> 'C:textfile.txt'
>
>
>
> --
> Steven D'Aprano
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>



-- 
Regards,
Sithembewena Lloyd Dube
http://www.lloyddube.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20100222/8bc1b370/attachment.html>


More information about the Tutor mailing list