簡體   English   中英

引用 Python 中子目錄之間文件的正確方法和 VSCode 設置是什么

[英]What's the correct way and VSCode setup to refer to files between subdirectories in Python

我有一個包含幾個子文件夾的文件夾,如下所示:

my-project/
  input/
    data.csv
  src/
    script.py

我想從script.py中的my-project/input/data.csv讀取數據,所以我有:

import pandas as pd
data = pd.read_csv('../input/data.csv')

但是,我的工作區是my-project ,所以當我運行script.py它返回:

發生異常:FileNotFoundError [Errno 2] 沒有這樣的文件或目錄:'../input/data.csv

這是可以理解的,因為inputmy-project中,而不是在同一級別。 但是,使用..引用確實感覺像是引用data.csv的正確方法,就像我們從script.py中所做的那樣。 但也許我錯了?

如果這是引用我的數據文件的合理方法 - 我如何設置 VSCode 以便能夠運行腳本而不返回錯誤? 我認為應該有一種方法可以將子文件夾添加到搜索路徑,而無需將子文件夾作為工作區打開,但我運氣不好試圖找到它。

@Edit:請注意,我知道相對/絕對路徑的概念。 這個問題更多的是關於 VSCode 設置。 我也願意接受答案:“不,使用../input/data.csv在此設置中是愚蠢的做法。您應該使用input/data.csv來代替,因為...”(它是與我目前的理解相矛盾,但我可能完全錯了,我很樂意學習不同的觀點)

我相信這比你想象的要簡單,讓我們一起做吧!

  1. 創建空文件夾

  2. 用 VSCode 打開它

使用的擴展...

  1. 擴展

我相信下面的步驟並不難!

  1. 基本步驟

將默認解釋器切換到創建的虛擬環境

  1. 虛擬環境

創建一個簡單的launch.json,用簡單的選擇python腳本

  1. 創建啟動.json

  2. Launch.json 文件示例

猜猜現在怎么樣! 我們現在要做的就是在編輯器中 select 一個script.py文件然后......運行!

  1. 運行腳本后

您可以在終端中看到結果。

讓我們談談...

生成的launch.json文件會強制我們在編輯器中select **src.script.py" 在我們每次要啟動程序之前點擊開始按鈕,如果你喜歡,我可以建議一個更合適的方法

在第 6 步中,您可以選擇Module而不是Python 文件,之后編輯器會提示您輸入模塊名稱的字段,我們的輸入必須是src.script

我們將得到我們的launch.json文件,像這樣......

新的launch.json

現在,我們可以從我們想要的地方啟動程序,這意味着如果在編輯器中打開的文件是“src/data.json”,例如,進入調試器部分並單擊啟動將始終啟動src/script。 .py文件。

如果您在工作區中運行腳本,則input/data.csv應該可以工作。 該位置不是基於您的腳本所在的位置,而是您運行它的位置。

要獲取當前工作目錄,您可以使用

import os
print(os.getcwd())

然后從那里開始 go。

編輯:您可以更改launch.json中的工作目錄,如下所述: https://stackoverflow.com/a/55072246/14246131

通過設置launch.json

"cwd":"${fileDirname}"

// or use "cwd":"${workspaceFolder}/src" to specifically assign /src as your current working directory

然后所有相對路徑都從您正在運行的 py 文件開始(在您的情況下是my-project/src ),您應該能夠使用:

data = pd.read_csv('../input/data.csv')

launch.json 變量可以在這里引用: https://code.visualstudio.com/docs/editor/variables-reference


這是我的示例環境供您參考:

文件結構:

my-project/
  .vscode/
    launch.json
  input/
    xxxxx.txt
  src/
    main.py

發射.json:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal",
            "cwd":"${fileDirname}"
        }
    ]
}

主要.py:

with open('../input/xxxxx.txt', 'r') as file_input:
    res = file_input.read()
    print(res)

我通常會執行以下操作 - 找出我的 current.py 文件所在的目錄並從那里使用相對路徑

import os
py_folder = os.path.dirname(os.path.abspath(__file__))
input_folder = os.path.join(py_folder, '../input')
data = pd.read_csv(os.path.join(input_folder', 'data.csv'))

這樣,您從哪個目錄運行 your.py 並不重要,它適用於任何開發環境,即不是 VSCode 特定的

您可能指的是與您的script.py路徑相關的../input/data.csv之類的文件

但這不是 go 關於它的正確方法,您應該添加與執行script.py的位置相關的文件路徑,我假設它最有可能來自項目文件夾的根目錄。 特別是如果您使用 VS 代碼中的 run python 命令。

因此,為什么路徑input/data.csv應該在這種情況下工作。

暫無
暫無

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

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