«Нет такого файла или каталога» с абсолютным путем - PullRequest
0 голосов
/ 14 октября 2019

Я хочу импортировать файл .png с

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

У меня есть абсолютный путь, но он все равно выдает ошибку:

[Errno 2] Нет такогофайл или каталог

Любые предложения для новичка Python?

Сначала я использовал относительный путь, переключился на абсолютный путь.

Ответы [ 2 ]

1 голос
/ 14 октября 2019

Как указывалось в предыдущем ответе, вам не нужно жестко кодировать пути, и вообще, чтобы получить доступ к домашнему каталогу текущего пользователя, вы можете использовать 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("~") (т. е. каталог профиля пользователя в большинстве случаев), поскольку большинство специальных путей (т. е. известные папки) перемещаются в оболочке. Используйте API для запроса оболочки Windows для пути к известной папке (например, FOLDERID_Downloads). Там - это пример использования 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)
1 голос
/ 14 октября 2019

Если вы используете Windows, этот путь может вызвать проблемы из-за направления косой черты. Проверьте эту статью . Вы не должны жестко кодировать пути, потому что независимо от того, какое направление слеша вы используете, он может сломаться в других операционных системах.

Он должен работать с чем-то вроде этого:

import os
import matplotlib.pyplot as plt

picture_path = os.path.join("C:", "Users", "myusername", "Downloads", "Mathe", "Picture.png")
im = plt.imread(picture_path)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...