簡體   English   中英

我的 Python 腳本在同一目錄下找不到 JSON 文件

[英]My Python Script can't find a JSON file in the same directory

我正在使用 API star 0.5.X 在 python 3.7 中練習一些 API 的作品,而我的 python 腳本找不到與 python 文件位於同一文件夾中的 .json 文件。 我正在使用 Atom 編輯器編寫和運行腳本,我正在使用 venv,這對我來說是相當新的。

我正在使用助手 function 使用“with open()”語句加載 JSON 數據。 我嘗試過使用相對和絕對文件路徑,但在這兩種情況下都無法找到文件。 我嘗試使用終端和 MacOS 查找器在 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”所在的路徑。

由於問題特定於您的設置,因此很難在代碼中重現或提供解決方案。 您的代碼本身看起來不錯,但有兩件事可能是導致您出現問題的原因:

  • 當您的腳本運行時,Python 需要訪問相應的源文件夾和已安裝的包; 你應該讓類似 virtualenv 的東西通過虛擬環境來管理它。 從終端,您可以加載適當的虛擬環境:
    /path/to/your/venv/Scripts/activate.sh
    如果您這樣做,您應該期望您的腳本找到它在該虛擬環境中的開發過程中所做的相同的庫。 確保在項目中包含諸如requirements.txt的內容,以便在新的虛擬環境中輕松地在不同機器上重新安裝相同的模塊。
  • 您的腳本在由 Python 運行時具有一個“工作目錄”。 這是 Python 啟動的目錄,您的腳本無法找到該文件(即使它可能與腳本本身位於同一文件夾中)可能是因為 Python 從不同的目錄啟動。

由於 Atom 編輯器的工作方式,這是一個問題。 改用vim解決了。

我只是部分理解,但顯然這與 Atom 有一個單獨的臨時目錄來存放工作文件或類似的東西有關。 使用vim編輯腳本,然后在終端調用,問題解決。

好的,所以我對 i.c.w 也有同樣的問題。 代碼:

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

導致FileNotFoundError

file.txt 100% 在同一個文件夾中……根據我 Mac 上的查找器,以及 VS 代碼中的文件夾列!

我正在拔頭發。 切換了很多解釋器,本地 python 和 Conda,到 Python 而不是 3.9,回到 python 2.8。 什么都不重要。

直到我把: file = open('file.txt')改成: file = open file = open('file.txt', 'a')突然沒用了,但是我馬上在VScode的“文件夾欄”看到了一個彈出新的 file.txt 文件。 在與 pythonfile.py 所在的完全不同的文件夾中。 那么在那之后; 我將所有本地回購推送到他們的遙控器; 刪除了整個caboodle,並通過git克隆將它們一個一個安裝在新文件夾中。 我打開了一個新的工作區,添加了那些項目文件夾,從那以后它就像一個魅力。

究竟出了什么問題; 對不起,我不知道。 但對我來說,重新安裝 repo 和 VScode 工作區才是關鍵所在。

我最近遇到了同樣的錯誤,在 Visual Studio Code 上,我設法解決了它,而不是單擊Run Python按鈕,我使用終端 cd 進入項目目錄並運行 python 腳本,沒問題!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM