'FileNotFoundError: [Errno 2] No such file or directory' but can't use exact, or absolute, path

'FileNotFoundError: [Errno 2] No such file or directory' but can't use exact, or absolute, path

我正在尝试制作一个基本的文字冒险游戏,如下所示:

import time

print ("Hello and welcome to Prison Break")                           
print()                                                                            
print("Press S to start")                                                          
while True:
    choice = input("> ")

    if choice == 'S'or's' :                                                     
        print("Paddy Games presents...")
        time.sleep (2)
        print("Prison Break!")
        time.sleep(1)
        print("Before we begin, lets find out a bit about how you got 
        stuck in this prison in the first place!")
        time.sleep(2.5)
        print("When you are finished reading, type finished")
        file = open("Prison Break Backstory.txt","r")
        file_contents = file.read()
        print (file_contents)
        print()

问题是当我转到 运行 时我得到了这个: 'FileNotFoundError: [Errno 2] No such file or directory' 我已经检查过我写的文件名是否正确,它确实存在

现在我知道网站上已经有使用精确或绝对路径的解决方案。但是,我将在家里用我的 raspberry pi 3 和我学校的计算机来处理这个问题。当我分发代码时,文件不会在同一个地方。所以总而言之,我需要一个解决方案,使文件在所有计算机上都可以找到,无论它在哪里,只要它在那里。

抱歉,如果这是一个愚蠢的问题,我仍在学习 python,尚未完善。 预先感谢您的任何回复!

你想要一个相对路径的例子,还是搜索计算机中的每个文件?对于后者,请查看 this question,这样您就可以执行以下操作:

for root, dirs, files in os.walk("C:/Users", topdown=False):
    for name in files:
        if name == "Prison Break Backstory.txt":
            file = open(os.path.join(root, name), "r")

但这非常低效,我真的建议您不要这样做。另外,如果这个文件的两个版本恰好位于不同的目录中,它就会搞砸。

相反,您应该做的是确保始终知道此文本文件相对于您的 python 代码的位置。假设您的整个项目位于 C:/Users/myname/Desktop/Project,您可以将 python 代码放在 C:/Users/myname/Desktop/Project/src(源)中,将文本文件放在 C:/Users/myname/Desktop/Project/txtfiles 中。每当您将 "Project" 文件夹发送给某人时,python 代码就可以像这样访问文本文件:

file = open("../txtfiles/Prison Break Backstory.txt","r")

此外,请确保始终在最后关闭文件。改用

可能会更好
with open("../txtfiles/Prison Break Backstory.txt", "r") as f:
    file_contents = f.read()

因此您不必关闭文件/冒着不关闭文件并出现 i/o 问题的风险。