Python ';没有这样的文件或目录';绝对路径
我想导入一个.png文件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,由于斜杠的方向,该路径可能会导致问题。退房您不应该硬编码路径,因为无论使用哪个方向的斜杠,它都可能在其他
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,Pythonopen
与识别“/“作为Windows中的路径分隔符。我们将该路径直接传递给C\u wopen
,后者将其传递给WindowsCreateFileW
。斜杠是文件系统命名空间中的保留字符。将DOS路径规范化为NT路径以与本机API一起使用时,系统运行库将斜杠转换为反斜杠(例如WINAPICreateFileW
->nativeNtCreateFile
)。在Windows文件系统API中,只有非规范化的路径必须使用反斜杠,即以“\\?\”开头的路径。我在您(非常详细)的回答中看到,这是针对程序的实际数据,我认为他试图访问磁盘上的一些随机文件。用户的“下载”目录是一个可重新定位的已知文件夹。这与漫游配置文件一起使用,以最大限度地减少用户登录时需要下载和同步的内容。然而,这甚至不必由组织策略来管理。用户可以手动打开已知文件夹的“属性”对话框并更改其位置。在GUI中,shell将显示文件夹,就好像它在概要文件中一样,但实际上它并不在那里。这只是一个高级抽象。在命令行或API级别,它不会出现在默认位置,除非还创建了连接。