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 <st...@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@python.org > To unsubscribe or change subscription options: > http://mail.python.org/mailman/listinfo/tutor > -- Regards, Sithembewena Lloyd Dube http://www.lloyddube.com
_______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor