我正在创建一个将 blob 文件存储到硬盘中的应用程序,但是这个脚本必须在 Linux 和 Windows 中运行,问题是我想给它一个从文件系统根目录开始的绝对路径,而不是相对于项目的路径文件,这是因为我使用 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
它也可能与用户主文件夹(unix 中的 /home/user 和 windows 中的 C:/Users/User)相关,但我想问题非常相似。
我怎样才能实现这个目标?是否有任何库或函数可以帮助我透明地转换此路径,而不必询问脚本一直在哪个平台上运行?
在我的两个选项中,从根目录绝对或从主文件夹相对,您建议使用哪一个?
提前感谢您对此的任何建议
使用
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
好吧,我自己得到了答案。
os.path.exists(os.path.abspath(filePath))
也许这对任何人都有用
我想在 python 代码中简单地从 '/' 转换为 '' 。我有一个来自 Windows PC 的共享文件夹“test_folder”(IP:192.168.1.1)。我使用过 os、pathlib 和 ntpath 库。但是,所有结果都带有双“”。我只是想将路径转换为带有单个“”的类似于 Windows 的路径。下面使用 re 模块的解决方案解决了问题。
import re
unix_path = '//192.168.1.1/test_folder/'
win_path = re.sub(r'/', r'\\', unix_path)
print(win_path)
>>> import os
>>> os.path.join('app', 'subdir', 'dir', 'filename.foo')
'app/subdir/dir/filename.foo'