如何解决具有相对路径和绝对路径的 PIL 图像中的 FileNotFoundError
import PIL.Image as pilimg
import numpy as np
# Read image
im = pilimg.open("../dataset/start.jpg")
# display image
im.show()
# Fetch image pixel data to numpy array
pix = np.array(im)
我正在尝试使用 Pillow 读取图像并将其转换为 NumPy 数组。但是,我尝试了几种方法,例如使用绝对路径和 PIL image.open() working for some images but not others 中的方法,除了使用 OpenCV 的方法。但是,它始终使 FileNotFound。
start.jpg
的绝对路径是 F:\GIST 강의 자료\2021 1학기\EC3202 신호 및 시스템\Programming Assignment\dataset\start.jpg
。我相信从 start.jpg
到 src/program.py
的相对路径是 ../dataset/start.jpg
。
我使用的是 conda 4.10.1 和 python 3.8.8 以及 windows 10。
解决方法
路径是相对于当前工作目录的。 如果您不确定 cwd 是什么,可以通过执行以下操作找到它:
print(f"Current working dir: {os.getcwd()})
然后你可以使用 os.path.join
从那里连接你的相对路径
os.path.join(os.getcwd(),'dataset/start.jpg')
,
不要依赖 os.getcwd 获取相对路径。原因如下。
改为使用 pathlib.Path
。例如,想想这些结构。
x:/
├ A
┃ ├ 1.png
┃ ├ 2.png
┃ ├ 3.png
┃ ├ 4.png
┃ └ 5.png
┃
└ B
└ script.py
如果你想从script.py
到1.png可靠地访问,你最好使用__file__
来确定脚本的路径- 因为当前工作目录可能与实际脚本位置不同,如下面的示例输出所示。
import pathlib
import os
print("Current cwd: ",os.getcwd())
# Get current script's folder
script_location = pathlib.Path(__file__).parent
# get data folder
data_location = script_location.parent.joinpath("A")
# single file example
png_file = data_location.joinpath("1.png")
# alternatively can iterate thru directory
for file_ in data_location.iterdir():
# print full path in linux style
print(f"{file_.absolute().as_posix()}")
(Accessing file in different path in absolute path)
jupiterbjy@NYARUDESK/D: py X:\B\script.py
Current cwd: D:\
X:/A/1.png
X:/A/2.png
X:/A/3.png
X:/A/4.png
X:/A/5.png
(Change directory)
jupiterbjy@NYARUDESK/D:
❯ cd x:
(Now use indirect path)
jupiterbjy@NYARUDESK/X: py .\B\script.py
Current cwd: X:\
X:/A/1.png
X:/A/2.png
X:/A/3.png
X:/A/4.png
X:/A/5.png
查看 cwd - 当前工作目录 - 每次运行的 os.getcwd
有何不同。
然而,无论您从何处间接或直接、外部或内部文件夹 B 访问该脚本,您都可以使用 __file__
、.parent
和相对可靠地访问文件.joinpath
对象的 pathlib.Path
方法。
查看pathlib
here的文档,我看到你是韩国人,这是链接到韩国文档。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。