用python在窗口中使用绝对的unixpath

我正在创build一个将blob文件存储到硬盘的应用程序,但是这个脚本必须在linux和windows上运行,问题是我想从文件系统根目录给它一个绝对path,而不是相对于项目文件,这是因为即时通讯使用git,而不想处理从同步中排除所有这些文件。

所以我想有这样的东西:

path = '/var/lib/blob_files/' file = open(path+'myfile.blob', 'w') 

并在unix中获得一个文件:

 /var/lib/blob_files/myfile.blob 

并在窗口中:

 C:\var\lib\blob_files\myfile.blob 

它也可以相对于用户主文件夹(/ home /用户在UNIX和C:/用户/用户在Windows中),但我想这个问题是非常相似的。

我怎么能做到这一点? 有什么图书馆或function可以帮助我透明地转换这个path,而不必问什么平台是一直运行的脚本?

我的两个选项,绝对从根目录或相对于主文件夹,您build议使用哪一个?

在此先感谢您的任何意见

Solutions Collecting From Web of "用python在窗口中使用绝对的unixpath"

对于与用户主目录相关的文件,使用os.path.abspath()os.path.expanduser()

 print os.path.abspath("/var/lib/blob_files/myfile.blob") >>> C:\var\lib\blob_files\myfile.blob print os.path.abspath(os.path.expanduser("~/blob_files/myfile.blob")) >>> C:\Users\jerry\blob_files\myfile.blob 

这些将为Windows和POSIX路径“做正确的事情”。

如果没有~的话, expanduser()不会改变路径,所以你可以安全的使用它。 因此,您可以轻松编写一个包装函数:

 import os def fixpath(path): return os.path.abspath(os.path.expanduser(path)) 

请注意,所使用的驱动器号将是Python进程当前工作目录(通常是脚本所在的目录)(如果从Windows资源管理器启动,并且假设您的脚本没有更改它)指定的驱动器。 如果你想强迫它总是C:你可以做这样的事情:

 import os def fixpath(path): path = os.path.normpath(os.path.expanduser(path)) if path.startswith("\\"): return "C:" + path return path 

从混合平台无关的文件路径响应?

 >>> import os >>> os.path.join('app', 'subdir', 'dir', 'filename.foo') 'app/subdir/dir/filename.foo'