On Thu, 2011-02-03 at 17:57 -0600, Thomas L. Shinnick wrote: > At 05:33 PM 2/3/2011, Westley Martínez wrote: > > > On Thu, 2011-02-03 at 23:11 +0000, Steven D'Aprano wrote: > > > > > On Thu, 03 Feb 2011 > > > 07:58:55 -0800, Ethan Furman wrote: > > > > Steven D'Aprano wrote: > > > [snip] > > > > > > Yes. Is there a problem? All those paths should be usable from Windows. > > > If you find it ugly to see paths with a mix of backslashes and forward > > > slashes, call os.path.normpath, or just do a simple string replace: > > > > > > path = path.replace('/', '\\') > > > > > > before displaying them to the user. Likewise if you have to pass the > > > paths to some application that doesn't understand slashes. > > > > > > > > > -- > > > Steven > > > > Paths that mix /s and \s are NOT valid on Windows. In one of the > > setup.py scripts I wrote I had to write a function to collect the > > paths of data files for installation. On Windows it didn't work and > > it was driving me crazy. It wasn't until I realized os.path.join was > > joining the paths with \\ instead of / that I was able to fix it. > > > > def find_package_data(path): > > """Recursively collect EVERY file in path to a list.""" > > oldcwd = os.getcwd() > > os.chdir(path) > > filelist = [] > > for path, dirs, filenames in os.walk('.'): > > for name in filenames: > > filename = ((os.path.join(path, name)).replace('\\', > > '/')) > > filelist.append(filename.replace('./', 'data/')) > > os.chdir(oldcwd) > > return filelist > > > Please check out os.path.normpath() as suggested. Example: > >>> import os > >>> s = r"/hello\\there//yall\\foo.bar" > >>> s > '/hello\\\\there//yall\\\\foo.bar' > >>> v = os.path.normpath(s) > >>> v > '\\hello\\there\\yall\\foo.bar' > > The idea behind os.path is to cater to the host OS. Thus > os.path.normpath() will convert to the host's acceptable delimiters. > That is, you didn't need the .replace(), but rather to more fully use > the existing library to good advantage with .normpath(). > > However, note that delimiters becomes an issue only when directly > accessing the host OS, such as when preparing command line calls or > accessing native APIs. Within the Python library/environment, both > '/' and '\' are acceptable. External use is a different matter. > > So, you need to be specific on how and where your paths are to be > used. For instance os.chdir() will work fine with a mixture, but > command line apps or native APIs will probably fail.
The reason why I use replace instead of normpath is because I want it to '/'s on ALL platforms. This is because distutils requires the use of '/'s.
-- http://mail.python.org/mailman/listinfo/python-list