无法打开资源文件,pygame错误:“FileNotFoundError:没有这个文件或目录。”

3
Import pygame

pygame.init()

BG = pygame.image.load('_pycache_/test_bg.jpg')

def DrawGameWin():
    window.blit(BG,(0,0))

pygame.display.update()


DrawGameWin()

1
错误信息听起来像是在硬盘上找不到文件。请检查您当前的工作目录以及要打开的文件路径! - csabinho
它们都在我的桌面文件夹里。我不确定接下来该怎么做。我应该把我想上传的图片移到哪里呢? - user12144855
在此处您可以看到如何检查您当前的工作目录。请确保您正确地假设了它。或者,您现在也可以提供完整路径,但这将破坏可移植性,因此请将其作为最后一种选择。 - csabinho
也许我没有理解。我运行了程序并显示了路径。我把它们都放在桌面上的同一个文件夹里。这不是相同的路径吗?这不应该解决问题吗? - user12144855
运行路径(换句话说,当前工作目录)很重要,而不是您的文件所在的文件夹。 - csabinho
请参阅什么是当前工作目录? - tripleee
1个回答

7
资源(图片、字体、音频等)文件路径必须相对于当前工作目录。工作目录可能与Python文件所在的目录不同。
将文件放置在同一目录或子目录中是不够的,您还需要设置工作目录。或者,您可以创建绝对文件路径。
文件的名称和路径可以通过__file__获取。当前工作目录可以通过os.getcwd()获取,并且可以通过os.chdir(path)进行更改。
import os

os.chdir(os.path.dirname(os.path.abspath(__file__)))

一种替代方案是找到绝对路径。 如果文件在Python文件的子文件夹中(甚至在同一个文件夹中),则您可以获取该文件的目录并连接(os.path.join())相对文件路径。例如:

import pygame
import os

# get the directory of this file
sourceFileDir = os.path.dirname(os.path.abspath(__file__))

# [...]

# join the filepath and the filename
filePath = os.path.join(sourceFileDir, 'test_bg.jpg')
# filePath = os.path.join(sourceFileDir, '_pycache_/test_bg.jpg')

surface = pygame.image.load(filePath)

使用 pathlib 模块也可以实现相同的功能。更改工作目录。
import os, pathlib

os.chdir(pathlib.Path(__file__).resolve().parent)

或者创建一个绝对路径:
import pathlib

# [...]

filePath = pathlib.Path(__file__).resolve().parent / 'test_bg.jpg'
surface = pygame.image.load(filePath)

os.getcwd() 返回当前工作目录并不是错误的;但是你不需要知道当前工作目录来解析相对文件名,因为这正是操作系统使用相对文件名为您完成的。 - tripleee
@tripleee 不,你不需要知道那个。但你可以用这个信息来调试。而且所有不相信并一直声称这个答案是错的人可以看到他们的错误。 - Rabbid76

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接