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

Ulrich Eckhardt eckhardt at satorlaser.com
Mon May 18 04:37:12 EDT 2009


Stef Mientki wrote:
> 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


-- 
Sator Laser GmbH
Geschäftsführer: Thorsten Föcking, Amtsgericht Hamburg HR B62 932




More information about the Python-list mailing list