绝对路径为“无此类文件或目录”

时间:2019-10-14 20:33:01

标签: python python-3.x windows

我要导入一个.png文件

import matplotlib.pyplot as plt
O = plt.imread('C:/Users/myusername/Downloads/Mathe/Picture.png')

我有绝对路径,但是它仍然给我错误:

  

[Errno 2]没有这样的文件或目录

对python新手有什么建议吗?

起初我使用相对路径,切换为绝对路径。

2 个答案:

答案 0 :(得分:1)

如果您使用Windows,则由于斜线的方向,该路径可能会导致问题。签出this article。您不应该对路径进行硬编码,因为无论使用哪个斜线,它都可能在其他操作系统上中断。

它应可与以下内容一起使用:

import os
import matplotlib.pyplot as plt

picture_path = os.path.join("C:", "Users", "myusername", "Downloads", "Mathe", "Picture.png")
im = plt.imread(picture_path)

答案 1 :(得分:1)

如上一个答案所述,您不应该对路径进行硬编码,通常,要访问当前用户的主目录,您可以使用     os.path.expanduser("~") 并通过一些输入控件,您的程序将变为:

import os
import matplotlib.pyplot as plt

picture_path = os.path.join(os.path.expanduser("~"), "Downloads", "Mathe",
                            "Picture.png")
if os.path.isfile(picture_path):
    im = plt.imread(picture_path)

您可以查看os.path here的完整文档。

正如Eryk Sun在评论中指出的那样,尽管在这种情况下它可以工作,但是在Windows中,实际上,由于大多数特殊路径(例如,即Windows 2000),不建议使用os.path.expanduser("~")(即在大多数情况下为用户的配置文件目录)。已知文件夹)可在外壳中重定位。使用API​​在Windows Shell中查询已知文件夹的路径(例如FOLDERID_Downloads)。 There是使用PyWin32的示例,如果无法使用Pywin32,则答案链接到使用ctypes的另一种方法。

最后,您可能会遇到类似的情况

import matplotlib.pyplot as plt
import os

import pythoncom
from win32com.shell import shell

kf_mgr = None
def get_known_folder(folder_id):
    global kf_mgr
    if kf_mgr is None:
        kf_mgr = pythoncom.CoCreateInstance(shell.CLSID_KnownFolderManager,None,
                                            pythoncom.CLSCTX_INPROC_SERVER,
                                            shell.IID_IKnownFolderManager)

    return kf_mgr.GetFolder(folder_id).GetPath()

picture_path = os.path.join(get_known_folder(shell.FOLDERID_Downloads), "Mathe", 
                            "Picture.png")
    if os.path.isfile(picture_path):
      im = plt.imread(picture_path)