"Neven Gorsic" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED]
On Mon, Jul 21, 2008 at 9:44 AM, Monika Jisswel
<[EMAIL PROTECTED]> wrote:
instead  of s='e:\mm tests\1. exp files\5.MOC-1012.exp'
try to use : s = r'e:\mm tests\1. exp files\5.MOC-1012.exp'.replace(
'\\', '\\\\')
for me here is what it gives:

s = r'e:\mm tests\1. exp files\5.MOC-1012.exp'.replace('\\', '\\\\')
print s
e:\\mm tests\\1. exp files\\5.MOC-1012.exp
s.split('\\\\')
['e:', 'mm tests', '1. exp files', '5.MOC-1012.exp']


why \\  i you only have one \ ? : you need to escape it because its a
special character to the python interpreter.


the r character is important in the expression  s = r'e:\mm tests\1. exp
files\5.MOC-1012.exp'.replace('\\', '\\\\') because it tells the interpreter
to take the string as RAW and thus leave it unchanged even if it contains
special characters that should actually be treated special.

now to use the r or not to use it ? when to use it ? how to use it ? I
always use it ! & always had the result I expected, so I would suggest you use it always too specialy with the re module, ofcourse unless the result is
not satisaying you,

so this code (using r this time works too) :

s = r'e:\mm tests\1. exp files\5.MOC-1012.exp'.replace(r'\\', r'\\\\')
print s
e:\\mm tests\\1. exp files\\5.MOC-1012.exp
s.split('\\\\')
['e:', 'mm tests', '1. exp files', '5.MOC-1012.exp']


Thanks,
I am aware of goodies that raw string offers, but my question was how to
use it with variable that already contains string.  :)

What it seems you don't understand is that raw strings just a method to create a string. If you already have a string read from a file, it is already created. Maybe you are confused between the "representation" of a string and the "value" of the string.

   >>> s = 'c:\\abc\\123.txt'
   >>> t = r'c:\abc\123.txt'
   >>> s==t
   True

Two ways to *create* the *same* string.

Note there are two ways to *display* a string as well. print displays the actual value. If you don't use print, you get a representation of the string in a way that can be used to create the string in code.

   >>> print s
   c:\abc\123.txt
   >>> print t
   c:\abc\123.txt
   >>> s
   'c:\\abc\\123.txt'
   >>> t
   'c:\\abc\\123.txt'

Note what happens if you use single backslashes without a raw to create the string:

   >>> s = 'c:\abc\123.txt'
   >>> s
   'c:\x07bcS.txt'
   >>> print s
   c:bcS.txt

Because it wasn't a 'raw' string, the \a was interpreted as the non-printable BEL control character. \123 was interpreted as an octal constant, which turned out to be capital-S. The representation of the string contained a \x07 for the BEL control character. Since it is unprintable, the representation displayed it as a hexadecimal escape code.

When you read a string from a file, the actual characters in the file end up in the string. No backslash interpretation is performed. So in your example, just read in the file and perform your operations:

sample.txt contains:

   c:\abc\123.txt

Code:

   >>> import os
   >>> pathname = open('sample.txt').read()
   >>> pathname
   'c:\\abc\\123.txt'
   >>> print pathname
   c:\abc\123.txt
   >>> print os.path.dirname(pathname)
   c:\abc
   >>> print os.path.basename(pathname)
   123.txt
   >>> os.path.dirname(pathname)
   'c:\\abc'
   >>> os.path.basename(pathname)
   '123.txt'

Does that clear up the confusion?

--Mark


_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to