微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

具有相对路径和绝对路径的 PIL 图像中的 FileNotFoundError

如何解决具有相对路径和绝对路径的 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)

Project directory

(我不是数据集的作者,所以我无法上传整个项目文件。)

我正在尝试使用 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.jpgsrc/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.py1.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 举报,一经查实,本站将立刻删除。