正在访问 os 中的文件路径
Accessing file path in the os
以下行,除非我弄错了,否则将获取您目录的绝对路径,以便您可以访问文件
PATH = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0])))
当我需要在我编写的程序中使用图像等时,这就是我通常使用的访问当前目录中的文件的方法。
现在,假设我执行以下操作,因为我正在使用 windows 访问目录中的特定图像
image = PATH + "\" + "some_image.gif"
这就是我的问题所在,这适用于 windows,但如果我没记错的话 "\"
适用于 windows 而这不适用于其他 OS ?我不能自己直接测试这个,因为我没有其他操作系统,否则我不会费心发帖。据我所知,文档中没有提到这一点。
如果确实如此,是否有解决办法?
是的,'\'
仅适用于 Windows。您可以使用 os.sep
,在 Windows 上使用 '\'
,在经典 Mac 上使用 ':'
,在几乎所有其他东西上使用 '/'
,或者任何适合当前平台。
你可以通常使用'/'
。除了 Windows 或 Unix 之外,没有人可能成为 运行 您的程序。 Windows 将在 大多数 情况下接受 '/'
路径名。但是有许多 Windows 命令行工具会混淆你的标志路径,如果它以 /
开头,有些即使你在中间有一个 /
,如果你在使用 \.\
路径时,/
被视为常规字符而不是分隔符,依此类推。所以你最好不要那样做。
最简单的方法就是使用 os.path.join
:
image = os.path.join(PATH, "some_image.gif")
作为旁注,在您的第一行中,您已经在使用 join
——但您不需要它:
PATH = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0])))
像这样只用一个参数调用join
是完全合法的,但也完全没用;你只是加入一件事,一无所有;你会得到你传入的确切内容。只需这样做:
PATH = os.path.abspath(os.path.dirname(sys.argv[0]))
最后一件事:如果您使用的是 Python 3.4+,您可能需要考虑使用 pathlib
而不是 os.path
:
PATH = Path(sys.argv[0]).parent.resolve()
image = PATH / "some_image.gif"
使用os.path.join
代替"\"
:
os.path.join(PATH, "some_image.gif")
该函数将智能地连接路径的不同部分。
PATH = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0])))
image = os.path.join(PATH, "some_image.gif")
os.path.join will intelligently join the arguments using os.sep 为您使用 OS 文件分隔符。
以下行,除非我弄错了,否则将获取您目录的绝对路径,以便您可以访问文件
PATH = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0])))
当我需要在我编写的程序中使用图像等时,这就是我通常使用的访问当前目录中的文件的方法。
现在,假设我执行以下操作,因为我正在使用 windows 访问目录中的特定图像
image = PATH + "\" + "some_image.gif"
这就是我的问题所在,这适用于 windows,但如果我没记错的话 "\"
适用于 windows 而这不适用于其他 OS ?我不能自己直接测试这个,因为我没有其他操作系统,否则我不会费心发帖。据我所知,文档中没有提到这一点。
如果确实如此,是否有解决办法?
是的,'\'
仅适用于 Windows。您可以使用 os.sep
,在 Windows 上使用 '\'
,在经典 Mac 上使用 ':'
,在几乎所有其他东西上使用 '/'
,或者任何适合当前平台。
你可以通常使用'/'
。除了 Windows 或 Unix 之外,没有人可能成为 运行 您的程序。 Windows 将在 大多数 情况下接受 '/'
路径名。但是有许多 Windows 命令行工具会混淆你的标志路径,如果它以 /
开头,有些即使你在中间有一个 /
,如果你在使用 \.\
路径时,/
被视为常规字符而不是分隔符,依此类推。所以你最好不要那样做。
最简单的方法就是使用 os.path.join
:
image = os.path.join(PATH, "some_image.gif")
作为旁注,在您的第一行中,您已经在使用 join
——但您不需要它:
PATH = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0])))
像这样只用一个参数调用join
是完全合法的,但也完全没用;你只是加入一件事,一无所有;你会得到你传入的确切内容。只需这样做:
PATH = os.path.abspath(os.path.dirname(sys.argv[0]))
最后一件事:如果您使用的是 Python 3.4+,您可能需要考虑使用 pathlib
而不是 os.path
:
PATH = Path(sys.argv[0]).parent.resolve()
image = PATH / "some_image.gif"
使用os.path.join
代替"\"
:
os.path.join(PATH, "some_image.gif")
该函数将智能地连接路径的不同部分。
PATH = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0])))
image = os.path.join(PATH, "some_image.gif")
os.path.join will intelligently join the arguments using os.sep 为您使用 OS 文件分隔符。