【问题标题】:Accessing file path in the os访问操作系统中的文件路径
【发布时间】:2015-07-16 22:51:46
【问题描述】:

除非我弄错了,否则以下行将获取您目录的绝对路径,以便您可以访问文件

PATH = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0])))

当我需要在我编写的程序中使用图像等时,这就是我通常使用的访问当前目录中的文件的方法。

现在,假设我使用 Windows 访问目录中的特定图像,因此执行以下操作

image = PATH + "\\" + "some_image.gif"

这是我的问题所在,这适用于 Windows,但如果我没记错的话 "\\" 是适用于 Windows 的,这不适用于其他操作系统?我自己不能直接测试这个,因为我没有其他操作系统,或者我不会费心发帖。据我所知,文档中没有提到这一点。 如果确实如此,有没有办法解决这个问题?

【问题讨论】:

  • 只需使用/'s,它适用于所有操作系统
  • os.path.join 有什么用?如果你只是将一件事传递给join,你只会取回那一件事;没有什么可以加入的。
  • 同时,您为什么image = 行中使用os.path.join?这正是您确实需要它的地方。
  • 好点只是重用另一个程序的代码,我正在遍历目录计数文件等。另外,为什么我需要图像行中的 .join?我设置了PATH 变量,然后在图像行中使用它来轻松调用多个图像、文件等的任意路径。我看到的唯一其他方法是遍历目录,然后从数组的元素只是认为这更容易另外,谢谢你没有意识到/'s 可以在任何操作系统上工作,认为由于某种原因它有所不同
  • 您需要 join 的原因是因为它抽象出了整个“我应该使用 \\ 或/或者我可以为当前平台找出正确的东西还是……”,然后就去做对。

标签: python file file-io operating-system


【解决方案1】:

是的,'\\' 仅适用于 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"

【讨论】:

  • 感谢您的出色回答,解决了我很多困惑的问题。
【解决方案2】:

使用os.path.join 代替"\\"

os.path.join(PATH, "some_image.gif")

该函数将智能地连接路径的不同部分。

【讨论】:

    【解决方案3】:
    PATH = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0])))
    image = os.path.join(PATH, "some_image.gif")
    

    os.path.join 将使用os.sep 智能地加入参数,它为您使用操作系统文件分隔符。

    【讨论】:

      猜你喜欢
      • 2013-06-14
      • 2013-09-18
      • 2018-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多