[英]What's the proper way to initialize instance attributes that refer to files?
[英]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
這是可以理解的,因為input
在my-project
中,而不是在同一級別。 但是,使用..
引用確實感覺像是引用data.csv
的正確方法,就像我們從script.py
中所做的那樣。 但也許我錯了?
如果這是引用我的數據文件的合理方法 - 我如何設置 VSCode 以便能夠運行腳本而不返回錯誤? 我認為應該有一種方法可以將子文件夾添加到搜索路徑,而無需將子文件夾作為工作區打開,但我運氣不好試圖找到它。
@Edit:請注意,我知道相對/絕對路徑的概念。 這個問題更多的是關於 VSCode 設置。 我也願意接受答案:“不,使用../input/data.csv
在此設置中是愚蠢的做法。您應該使用input/data.csv
來代替,因為...”(它是與我目前的理解相矛盾,但我可能完全錯了,我很樂意學習不同的觀點)
我相信這比你想象的要簡單,讓我們一起做吧!
使用的擴展...
我相信下面的步驟並不難!
將默認解釋器切換到創建的虛擬環境
創建一個簡單的launch.json,用簡單的選擇python腳本
猜猜現在怎么樣! 我們現在要做的就是在編輯器中 select 一個script.py文件然后......運行!
您可以在終端中看到結果。
讓我們談談...
生成的launch.json文件會強制我們在編輯器中select **src.script.py" 在我們每次要啟動程序之前點擊開始按鈕,如果你喜歡,我可以建議一個更合適的方法
在第 6 步中,您可以選擇Module而不是Python 文件,之后編輯器會提示您輸入模塊名稱的字段,我們的輸入必須是src.script 。
我們將得到我們的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.