python 跨目錄訪問文件

1.同級、同目錄的文件之間的訪問app

有這樣一個目錄結構函數

 

 

 假如,in_A.py  想訪問  hello_world.py 中的函數怎麼呢?  ------->>>   importspa

只需在 in_A.py 中 寫入 code

1 import hello_world
2 hello_world.functions()

這樣就能夠訪問啦,什麼原理呢?對象

import hello_world 的本質blog

首先,import 語法會將 hello_world 裏的全部內容解釋到內存中,並把它賦值給 hello_world 這個變量,而後咱們就能夠經過點號訪問 這個變量裏的內容了,好比函數,變量什麼的內存

好比 hello_world.hello() 就是調用了hello_world.py 裏的 hello() 方法。it

 接下來一個問題,import 是怎麼找到 hello_world.py 這個文件的呢?io

import 首先會在當前目錄下找,沒找到就去環境變量裏找。function

環境變量,能夠經過 sys 模塊下的 path列表查看哈

到這裏,就明白了同級同目錄之間的文件訪問啦


 

2.同級、不一樣目錄的文件之間的訪問

如今來了個這樣的目錄結構

 這時若是說 in_B.py 這位老兄也想訪問 hello_world.py 裏的對象怎麼辦呢? 直接 import是確定不行啦,由於當前目錄找不到,環境變量裏也找不到。

 若是 import content_A 會是什麼效果呢?固然也是不行啦。content_A 沒在環境變量裏。他沒有在環境變量裏那就把他的「 father 」加進去吧,爲啥加他的上級目錄?找到他的父級目錄也就找到他了

把上級目錄加入環境變量:

1 import os
2 import sys
3 path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
4 # print(path)
5 sys.path.append(path) 

dirname() 函數返回上級目錄

abspath() 函數把相對來說轉化爲絕對路徑

__flie__ 變量存儲的是當前文件的相對路徑

最後哦經過 sys 模塊把一個路徑加入環境變量

完成了上面的 一系列操做之後,問題又來了

以前 import 的是 .py的文件,如今直接 import 了一個目錄,解釋器會幹什麼呢?若是一個目錄下有一堆文件他應該 import 那個呢?

hh,解釋器是很聰明的,他會跑去解釋目錄下的 __init__.py 文件。一般這個文件都是沒有內容的,可是解釋器既然都去了,那麼就給幾行代碼給他解釋一下吧。

這時就能夠用把 content_A 的父級目錄加入環境變量的方法,把 content_A 加入加入環境變量啦,把代碼寫入__init__.py 就行了,這時就能夠愉快的在

in_B.py 裏 import, 「content_A」目錄下的文件啦,不僅限於 hello_world 哦

3.不一樣級、不一樣目錄的文件之間的訪問

 有了上面的思路,想 import 誰,把他的 父級目錄  送進  環境變量就能夠了,就不舉例子了

相關文章
相關標籤/搜索