Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ';没有这样的文件或目录';绝对路径_Python_Python 3.x_Windows - Fatal编程技术网

Python ';没有这样的文件或目录';绝对路径

Python ';没有这样的文件或目录';绝对路径,python,python-3.x,windows,Python,Python 3.x,Windows,我想导入一个.png文件 import matplotlib.pyplot as plt O = plt.imread('C:/Users/myusername/Downloads/Mathe/Picture.png') 我有绝对路径,但它仍然给我错误: [Errno 2]没有这样的文件或目录 对python新手有什么建议吗 起初我使用相对路径,切换到绝对路径。如果您使用的是Windows,由于斜杠的方向,该路径可能会导致问题。退房您不应该硬编码路径,因为无论使用哪个方向的斜杠,它都可能在其他

我想导入一个.png文件

import matplotlib.pyplot as plt
O = plt.imread('C:/Users/myusername/Downloads/Mathe/Picture.png')
我有绝对路径,但它仍然给我错误:

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

对python新手有什么建议吗


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

如果您使用的是Windows,由于斜杠的方向,该路径可能会导致问题。退房您不应该硬编码路径,因为无论使用哪个方向的斜杠,它都可能在其他操作系统上中断

它应该与这样的东西一起工作:

导入操作系统
将matplotlib.pyplot作为plt导入
picture\u path=os.path.join(“C:”,“Users”,“myusername”,“Downloads”,“Mathe”,“picture.png”)
im=plt.imread(图片路径)

正如前面的答案所述,您不应该硬编码路径,一般来说,要访问当前用户的主目录,您可以使用
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的完整文档

正如Eryk Sun在评论中所指出的,虽然在本例中它可以工作,但在Windows中,实际上不建议使用
os.path.expanduser(“~”
(在大多数情况下是用户的配置文件目录),因为大多数特殊路径(即已知文件夹)都可以在shell中重新定位。使用API查询Windows shell中已知文件夹的路径(例如FOLDERID_下载)。是一个使用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)

是否已使用命令行工具验证图像是否位于指定的路径中?将其复制并粘贴到windows资源管理器地址栏中,然后查看结果happens@Markus,是否确定“/”不应为“\”?你能检查一下吗?先检查一下图像是否在那里。如果是,请检查您的应用程序是否具有读取该文件的操作系统权限。最后,值得验证的是,您正在调用的方法是否适用于前斜杠
/
。在Windows上,更常见的是使用向后斜杠,这需要转义,因此您需要
C:\\Users\\myusername\\Downloads\\Mathe\\Picture.png
。也就是说,Windows也支持正向斜杠,因此该方法也应该支持它,但除非您仔细查看,否则您永远不知道它们在引擎盖下做什么。Windows/DOS始终支持这两种斜杠,现在仍然支持。从我链接的文章中:“从技术上讲,这段代码仍然可以在Windows上运行,因为Python有一个漏洞,当您在Windows上调用open()时,它可以识别任意一种斜杠。但即使如此,你也不应该依赖于它。如果您在错误的操作系统上使用了错误的斜杠,并非所有Python库都能工作,特别是当它们与外部程序或库接口时。“使用
os.path.join
pathlib
,不是总是更安全吗?”在您的回答中,您说:“如果您使用的是Windows,由于斜杠的方向,该路径将不起作用”。这显然是错误的(正如您引用的文章中所述)。某些第三方库中可能存在bug这一事实与此无关。请更正为更精确一点:)@nicholashz,Python
open
与识别“/“作为Windows中的路径分隔符。我们将该路径直接传递给C
\u wopen
,后者将其传递给Windows
CreateFileW
。斜杠是文件系统命名空间中的保留字符。将DOS路径规范化为NT路径以与本机API一起使用时,系统运行库将斜杠转换为反斜杠(例如WINAPI
CreateFileW
->native
NtCreateFile
)。在Windows文件系统API中,只有非规范化的路径必须使用反斜杠,即以“\\?\”开头的路径。我在您(非常详细)的回答中看到,这是针对程序的实际数据,我认为他试图访问磁盘上的一些随机文件。用户的“下载”目录是一个可重新定位的已知文件夹。这与漫游配置文件一起使用,以最大限度地减少用户登录时需要下载和同步的内容。然而,这甚至不必由组织策略来管理。用户可以手动打开已知文件夹的“属性”对话框并更改其位置。在GUI中,shell将显示文件夹,就好像它在概要文件中一样,但实际上它并不在那里。这只是一个高级抽象。在命令行或API级别,它不会出现在默认位置,除非还创建了连接。