python跨目录调用_python 跨目录访问文件
1.同級、同目錄的文件之間的訪問
有這樣一個目錄結構
假如,in_A.py 這個文件想調用 hello_world.py 中的函數怎么辦呢? --->>>??import
只需在 in_A.py 中 寫入
importhello_world
hello_world.functions()
這樣就可以訪問啦,什么原理呢?
import hello_world的本質
首先,import 語法會將 hello_world 里的所有內容解釋(一行一行的讀)到內存中,并把它賦值給hello_world 這個對象,然后我們就可以通過點號(' . ')訪問這個對象里的內容了,比如調用函數,使用變量......
比如 hello_world.hello() 就是調用了hello_world.py 里的 hello() 方法。
接下來一個問題,import 是怎么找到 hello_world.py 這個文件的呢?
--->>> import 首先會在當前目錄下找,沒找到就去環境變量里找。
環境變量,可以通過 sys 模塊下的 path列表查看哈
importsysprint(sys.path)
到這里,就明白了同級同目錄之間的文件訪問了
2.同級、不同目錄的文件之間的訪問
現在來了個這樣的目錄結構
如果說 in_B.py 這位老兄也想訪問 hello_world.py 里的對象怎么辦呢? 直接 import是肯定就不行啦,因為當前目錄下找不到,環境變量里也找不到。
如果 import content_A 會是什么效果呢?當然也是不行的。content_A 沒在環境變量里。既然他沒有在環境變量里那就把他的“ father ”加進去吧,為啥加他的上級目錄?它的父級目錄再環境變量里的話,找到他的父級目錄也就找到他了。
把上級目錄加入環境變量:
importosimportsys
path= os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#print(path)
sys.path.append(path)
dirname() ,返回上級目錄
abspath() ,把相對路勁轉化為絕對路徑
__flie__變量存儲的是當前文件的相對路徑
最后通過 append() 把一個路徑加入環境變量,完成了上面的 一系列操作以后,問題又來了
之前 import 的是 .py的文件,現在直接 import 了一個目錄,解釋器會干什么呢?如果一個目錄下有一堆文件他應該 import 那個呢?
hh,解釋器是很聰明的,他會跑去解釋目錄下的 __init__.py文件。通常這個文件都是沒有內容的,但是解釋器既然都去了,那么就給幾行代碼給他解釋一下吧。
這時就可以用把 content_A 的父級目錄加入環境變量的方法,把 content_A 加入環境變量,把代碼寫入__init__.py就好了,這時就可以愉快的在 in_B.py 里 import, “content_A”目錄下的文件啦,不只限于 hello_world
3.不同級、不同目錄的文件之間的訪問
有了上面的思路,想 import 誰,把他的父級目錄送進環境變量就可以了,就不舉例子了
總結
以上是生活随笔為你收集整理的python跨目录调用_python 跨目录访问文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有趣的vscode插件
- 下一篇: python访问序列元素的编号用什么括起