Как указывалось в предыдущем ответе, вам не нужно жестко кодировать пути, и вообще, чтобы получить доступ к домашнему каталогу текущего пользователя, вы можете использовать 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)