【问题标题】:My Python Script can't find a JSON file in the same directory我的 Python 脚本在同一目录中找不到 JSON 文件
【发布时间】:2019-08-23 00:33:42
【问题描述】:

我正在使用 API star 0.5.X 在 python 3.7 中练习一些 API 工作,我的 python 脚本找不到与 python 文件位于同一文件夹中的 .json 文件。我正在使用 Atom 编辑器编写和运行脚本,并且正在使用 venv,这对我来说是相当新的。

我正在使用辅助函数通过“with open()”语句加载 JSON 数据。我尝试使用相对和绝对文件路径,在这两种情况下都无法找到文件。我尝试使用终端和 MacOS finder 在 Atom 中启动文件。 这是我目前所拥有的:

import json
from typing import List
import os
from apistar import App, Route, types, validators
from apistar.http import JSONResponse

print(os.getcwd())
os.chdir('/Users/{myusernamehere}/100days/apistar')
print(os.getcwd())

#helpers
def _load_employee_data():
   with open('employees.json') as f:
       employees = json.loads(f.read())
       return employees

第二个打印语句打印正确的文件路径,即“employees.json”和“app.py”所在的路径。

【问题讨论】:

  • 你怎么打电话给_load_employee_data
  • 尝试将cwd传入加载函数或使用绝对文件路径

标签: python json python-3.x python-venv


【解决方案1】:

由于问题是特定于您的设置的,因此很难在代码中重现或提供解决方案。您的代码本身看起来不错,但有两件事可能是您的问题的原因:

  • 当您的脚本运行时,Python 需要访问相应的源文件夹和已安装的包;你应该让 virtualenv 之类的东西通过虚拟环境来管理它。从终端,您可以使用以下命令加载适当的虚拟环境:
    /path/to/your/venv/Scripts/activate.sh
    如果这样做,您应该期望您的脚本在该虚拟环境中找到它在开发期间所做的相同库。确保在项目中包含 requirements.txt 之类的内容,以便在新的虚拟环境中的不同机器上轻松重新安装相同的模块。
  • 当由 Python 运行时,您的脚本有一个“工作目录”。这是 Python 的启动目录,而您的脚本无法找到该文件(即使它可能与脚本本身位于同一文件夹中)可能是因为 Python 是从不同的目录启动的。

【讨论】:

  • 感谢您提供这些信息,我使用os模块更改了当前工作目录,但仍然遇到同样的错误:是否有可能python安装不正确?
  • 请提供您如何从脚本内部更改工作目录的代码,因为您似乎不太可能真正成功地将工作目录更改为脚本和文件所在的位置。
  • 我已经更新了我的初始帖子以包含我用来更改当前工作目录的代码,当我第二次打印 'os.getcwd()' 语句时,它会显示我正确的文件路径想要
  • 您的代码似乎不是您实际运行的代码,因为没有调用 _load_employee_data()
【解决方案2】:

这是由于 Atom 编辑器的工作方式造成的问题。改用vim解决了。

我只是部分理解,但显然这与 Atom 有一个用于工作文件的单独临时目录或类似的东西有关。使用vim编辑脚本,然后在终端调用,问题就解决了。

【讨论】:

  • 作为答案,这不是很有帮助。 Atom 做了哪些 vim 没有做的事情?它是如何影响您的问题的?您应该完全删除/关闭问题,或者提供可能对其他用户有所帮助的更好答案。
【解决方案3】:

好的,我对 i.c.w 也有同样的问题。 VS代码:

file = open('file.txt')
print(file.name)

导致 FileNotFoundError

file.txt 100% 在同一个文件夹中...根据我 Mac 上的 finder 和 VS 代码中的文件夹列!

我正在拔头发。将很多解释器、本地 python 和 Conda 切换到 Python 3.8 而不是 3.9,回到 python 2.8。 什么都不重要。

直到我改变: file = open('file.txt') 至:file = open('file.txt', 'a') 并没有突然起作用,但是我立即看到在VScode的“文件夹列”中弹出了一个新的file.txt文件。在一个完全不同的文件夹中,然后是 pythonfile.py 所在的位置。所以在那之后;我将所有本地 repo 推送到他们的遥控器;删除了整个caboodle,并通过git clone将它们一个一个安装在一个新文件夹中。我打开了一个新的工作区,添加了这些项目文件夹,从那时起它就像一个魅力。

到底出了什么问题;对不起,我不知道。但对我来说,重新安装 repo 和 VScode 工作区才是关键。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多