簡體   English   中英

為什么我的 Python 程序找不到我的文件?

[英]Why can't my Python program find my file?

注意:我使用的是 Windows,這個程序也必須在 Mac 上運行。

我正在編寫一個需要讀取和寫入 JSON 文件的 Python 應用程序,我在src/resources.py中實現了該文件:

import json
def load_json():
    with open('saved_data.json', 'rt') as file_in:
        stored_text = file_in.read()
    stored_json = json.loads(stored_text)
    # parse stored_json & return created objects

在程序開始時,它應該從文件中加載數據,但是當我運行main.py (我通常從中運行程序)時,它給了我一個運行時錯誤:

File "<project path>\src\resources.py", line 12, in load_json
    with open('saved_data.json', 'rt') as file_in:
FileNotFoundError: [Errno 2] No such file or directory: 'saved_data.json'

這是我的文件結構的樣子:

project/
    main.py
    saved_data.json
    src/
        __init__.py
        resources.py
        more files...

我嘗試將'..\\''../'添加到文件路徑字符串的開頭,認為它可能與 resources.py 而不是 main.py 相關,但這也會導致錯誤。 我現在不確定該怎么做,因為我沒有看到任何具體的地方可能會出錯。 確定文件結構沒問題。 我在這里遺漏或誤解了什么?

您的問題是關於如何布局項目文件夾的結構。 這對新手來說是一個非常困難的話題。

請記住,在 Python 中有很多可能的方法和樣式可以做到這一點。 但是今天查看setuptools文檔,現代且最推薦的樣式是所謂的 _ src -layout。

您的布局仍在進行中,只需要稍作修改。

假設您的項目名稱是“ project ”。 這會產生存儲庫的名稱(例如,在 git 服務器上)或項目文件夾的名稱。 它也是您的的名稱。 但是包文件夾和項目文件夾是不同的東西。

將您的布​​局修改為此

project/
    saved_data.json
    src/
        project/
            __main__.py
            __init__.py
            resources.py
            more files...

我創建了一個新的子文件夾project/src/project/這是包文件夾。 main.py文件被移入其中並重命名為__main__.py (更多細節)。 這使文件夾project/src/project/可運行。

__main__.py的內容可能如下所示

from .ressources import load_json

if __name__ == '__main__':
   load_json()

如果您正在像這樣(有效地)運行您的程序:

python main.py

...然后...

from os.path import join

with open(join(__file__, '..', 'saved_data.json')) as file_in:
  pass # process the file here

因此,您當前的工作目錄無關緊要,因為file將是 main.py 的絕對路徑

暫無
暫無

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

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