strange transliteration in win32com.client

"Martin v. Löwis" martin at v.loewis.de
Tue Oct 23 23:50:29 CEST 2007


> 'Microsoft JET Database Engine', "'c:\\Hqwhslfs001\\office\risk
> oversight\\myaccess.mdb' is not a valid path.  Make sure that the path
> name is spelled correctly and that you are connected to the server on
> which the file resides.", None, 5003044, -2147467259), None)
> 
> Please note the strange insertion of double slashes in the indicated
> 'not valid path.'

That is not strange at all. In Python, the \ character in a string
literal is an escape character, see

http://docs.python.org/ref/strings.html

When Python prints out a string in its "repr", it always uses the
source code notation to print it back.

So if you want to have a single backslash in a string, you have to put
two backslashes into the source code.

> When I call it with data_source = 'V:\risk oversight\myassessdb.mdb',
> which reflects how this same drive is mapped on my machine, I get:
> 
> 'Microsoft JET Database Engine', "'v:\\\risk oversight\
> \myaccessdb.mdb' is not a valid path.
> 
> Note the weird transliteration of data_source.  I am powerless to
> understand this.

In your source code, \r is not a backslash-followed-by-r, but a
carriage-return character (so it's a single character, not two);
also in the first example. Windows finds that the file you denote
here does not exist - you don't have any files with a carriage
return in their file name on your disk.

In addition, Windows considers V:foo as a relative path; relative
to the current directory on drive V. So V:foo is a short-hand
for V:\foo, which, as a Python string, reads 'V:\\foo'. As you
have the director '\risk oversight' specified (which starts
with CR), the full normalized string will display with three
consecutive \ characters.

You can avoid quoting all backslashes by using raw strings
(see above URL).

HTH,
Martin



More information about the Python-list mailing list