python獲取當前路徑及父結節,祖先節點遇到的坑

2021-08-26 05:42:36 字數 1485 閱讀 8566

python經常會遇到切換路徑的操作。例如檔案結構如下

在寫程式時遇到test.test_data.py裡呼叫utils.data_process.data.py的open_file()讀取data.txt的目錄,跟直接在utils.data_process.data.py執行呼叫open_file()讀取data.txt的目錄,執行結果是不同的。個人猜想:test呼叫時是以test所在目錄作為當前目錄的,直接執行時是取的data_process目錄作為當前目錄的。所以為了避免這種情況發生,選對讀取路徑的函式非常關鍵,通過實驗發現,在data.py檔案用os.path.dirname(__file__)讀取的檔案所在路徑,無論怎麼呼叫都是%專案所在物理路徑%testpath/utils/data_process,這樣再想辦法根據需求取父節點,和祖先節點就可以了。

data.txt

[store]

shopid = '20180828'

shopname = 'sunny'

address = 'shanghai'

data.py

#!coding:utf-8

import configparser

import os

def open_file():

cp = configparser.configparser()

# 獲取data.py的目錄

# data_directory = os.path.dirname(__file__)

data_directory = os.path.abspath(os.path.dirname(__file__))

print('data.txt所在目錄=%s'%data_directory)

# 專案路徑為data.py的上上級目錄

project = os.path.abspath(os.path.join(data_directory, '../..'))

print('工程路徑=%s'%project)

file_name = project + '\\data\\data.txt'

cp.read(file_name)

shop_id = cp.get('store','shopid')

shop_name = cp.get('store','shopname')

print(shop_id, shop_name)

if __name__== '__main__':

open_file()

test_data.py

from utils.data_process.data import open_file

open_file()

python獲取當前路徑

import os,sys 使用sys.path 0 sys.argv 0 os.getcwd os.path.abspath file os.path.realpath file sys.path是python會去尋找模組的搜尋路徑列表,sys.path 0 和sys.argv 0 是一回事因為p...

Python獲取當前路徑

refs 假設py檔案路徑為 f seg myresearch myproject 2 test.py import sys print sys.argv 0 獲得的是當前執行指令碼的位置 若在命令列執行的該命令,則為空 12執行結果 在python指令碼中執行的結果 f seg myresearc...

Python程式設計獲取當前路徑

在編寫各類應用程式時,獲取當前路徑一直是乙個經典問題,只有獲取了當前路徑才可以進一步找到所有同路徑下的其它檔案。python程式語言也可以通過一些系統呼叫來獲得當前路徑。本文給出的模組不僅僅可以獲取當前路徑,也可以形成sqlobject使用的uri形式字串,以當前路徑下的指定檔名合成資料庫路徑。im...