os.path.split gets confused with combined \\ and /

S

Stef Mientki

hello,

just wonder how others solve this problem:
I've to distribute both python files and data files.
Everything is developed under windows and now the datafiles contains
paths with mixed \\ and /.
Under windows everthing is working well,
but under Ubuntu / Fedora sometimes strange errors occurs.
Now I was thinking that using os.path.split would solve all problems,
but if I've the following relative path

path1/path2\\filename.dat

split will deliver the following under windows
path = path1 / path2
filename = filename.dat

while under Linux it will give me
path = path1
filename = path\\filename.dat

So I'm now planning to replace all occurences of os.path.split with a
call to the following function

def path_split ( filename ) :
# under Ubuntu a filename with both
# forward and backward slashes seems to give trouble
# already in os.path.split
filename = filename.replace ( '\\','/')

return os.path.split ( filename )

how do others solve this problem ?
Are there better ways to solve this problem ?

thanks,
Stef Mientki
 
U

Ulrich Eckhardt

Stef said:
I've to distribute both python files and data files.
Everything is developed under windows and now the datafiles contains
paths with mixed \\ and /.

For your info: Some (!!!) parts of MS Windows understand forward slashes as
path separators and disallows them in file names, so you can often get away
with mixed paths. However, no POSIX system will understand a backslash as
path separator, which is a normal (though unusual) character in a file
name.
Under windows everthing is working well,
but under Ubuntu / Fedora sometimes strange errors occurs.
Now I was thinking that using os.path.split would solve all problems,
but if I've the following relative path

path1/path2\\filename.dat

split will deliver the following under windows
path = path1 / path2
filename = filename.dat

while under Linux it will give me
path = path1
filename = path\\filename.dat

So I'm now planning to replace all occurences of os.path.split with a
call to the following function

def path_split ( filename ) :
# under Ubuntu a filename with both
# forward and backward slashes seems to give trouble
# already in os.path.split
filename = filename.replace ( '\\','/')

return os.path.split ( filename )

how do others solve this problem ?
Are there better ways to solve this problem ?

Your data files must not contain OS-dependent paths. So, I would recommend
that you simply use forward slashes exclusively there, because those are
most common as path separators. Under POSIX systems like Ubuntu, you can
then use them 'as-is', while under win32 you would first convert them to
paths with backslashes (os.path.separator). Generalised, you could do
something like this:

indep_path = string.split(line, data_path_separator)
native_path = os.path.join(indep_path)

'data_path_separator' would then of course have to be the type of path
separator that is defined for your data format, per above I would suggest
slashes.

Uli
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,995
Messages
2,570,226
Members
46,815
Latest member
treekmostly22

Latest Threads

Top