Discussion:
Double backslash in filepaths ?
(too old to reply)
Stef Mientki
2007-04-14 09:26:07 UTC
Permalink
It looks like sometimes a single backslash is replaced by a double backslash,
but sometimes it's not ???
See the error message below,
the first backslash is somewhere (not explicitly in my code) replaced,
but the second is not ???
Is it in general better to use double backslash in filepaths ?

thanks,
Stef Mientki
Write_Signal_File_Ext (IOO, fSamp, 'D:\data_to_test\test_global.pd')
Traceback (most recent call last):
File "<string>", line 21, in ?
File "D:\data_to_test\Signal_WorkBench.py", line 118, in Write_Signal_File_Ext
DataFile.Write_Data (Data)
File "D:\data_to_test\Signal_WorkBench.py", line 95, in Write_Data
self.Write_Header(Nchan)
File "D:\data_to_test\Signal_WorkBench.py", line 83, in Write_Header
self.datafile = open(self.filename,'wb')
IOError: [Errno 2] No such file or directory: 'D:\\data_to_test\test_global.pd'
Michael Bentley
2007-04-14 09:50:26 UTC
Permalink
Post by Stef Mientki
It looks like sometimes a single backslash is replaced by a double backslash,
but sometimes it's not ???
See the error message below,
the first backslash is somewhere (not explicitly in my code) replaced,
but the second is not ???
Is it in general better to use double backslash in filepaths ?
thanks,
Stef Mientki
Write_Signal_File_Ext (IOO, fSamp, 'D:\data_to_test
\test_global.pd')
File "<string>", line 21, in ?
File "D:\data_to_test\Signal_WorkBench.py", line 118, in
Write_Signal_File_Ext
DataFile.Write_Data (Data)
File "D:\data_to_test\Signal_WorkBench.py", line 95, in
Write_Data
self.Write_Header(Nchan)
File "D:\data_to_test\Signal_WorkBench.py", line 83, in
Write_Header
self.datafile = open(self.filename,'wb')
IOError: [Errno 2] No such file or directory: 'D:\\data_to_test
\test_global.pd'
If I remember correctly, you don't really have to use backslashes at
all. I think that's just a holdover from when DOS filesystems first
became hierarchical -- and they had already used the sensible
directory delimiter '/' as a command line switch character. So I
think you can just substitute forward slashes and forget that double-
backslash madness.

But that's not really answering your question, is it?

What you're looking for is called 'escape characters'. The single
backslash combines with the 't' to become a TAB character. The
Post by Stef Mientki
print 'D:\\data_to_test\test_global.pd'
D:\data_to_test est_global.pd

hth,
Michael
John J. Lee
2007-04-14 10:33:38 UTC
Permalink
Post by Stef Mientki
It looks like sometimes a single backslash is replaced by a double backslash,
but sometimes it's not ???
See the error message below,
the first backslash is somewhere (not explicitly in my code) replaced,
but the second is not ???
Is it in general better to use double backslash in filepaths ?
[...]
Post by Stef Mientki
IOError: [Errno 2] No such file or directory: 'D:\\data_to_test\test_global.pd'
'\t' is the tab character. '\d' is not a valid escape sequence, so
the backslash there survives intact. repr() normalises the string on
output, so the (single!) backslash in '\d' is displayed, as always in
the repr of strings, as '\\'.

You should either use this:

'D:\\data_to_test\\test_global.pd'


Or this:

r'D:\data_to_test\test_global.pd'

See also:

http://www.python.org/doc/faq/general/#why-can-t-raw-strings-r-strings-end-with-a-backslash


Or even this, which will work unless you're using crufty software that
doesn't like slash path separators (cmd.exe being one of those pieces
of software):

'D:/data_to_test/test_global.pd'


John
Stef Mientki
2007-04-14 11:02:21 UTC
Permalink
Post by John J. Lee
Post by Stef Mientki
It looks like sometimes a single backslash is replaced by a double backslash,
but sometimes it's not ???
See the error message below,
the first backslash is somewhere (not explicitly in my code) replaced,
but the second is not ???
Is it in general better to use double backslash in filepaths ?
[...]
Post by Stef Mientki
IOError: [Errno 2] No such file or directory: 'D:\\data_to_test\test_global.pd'
'\t' is the tab character. '\d' is not a valid escape sequence, so
the backslash there survives intact. repr() normalises the string on
output, so the (single!) backslash in '\d' is displayed, as always in
the repr of strings, as '\\'.
'D:\\data_to_test\\test_global.pd'
r'D:\data_to_test\test_global.pd'
http://www.python.org/doc/faq/general/#why-can-t-raw-strings-r-strings-end-with-a-backslash
Or even this, which will work unless you're using crufty software that
doesn't like slash path separators (cmd.exe being one of those pieces
'D:/data_to_test/test_global.pd'
John
thanks John and Michael,
this is a very helpful explanation.

cheers,
Stef

Loading...