溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

使用Python如何正確讀取資源文件

發(fā)布時間:2020-11-03 16:43:04 來源:億速云 閱讀:207 作者:Leah 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)使用Python如何正確讀取資源文件,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

我們知道,當(dāng)你把一個資源文件和一個.py文件放在一起的時候,你可以直接在這個.py文件中,使用文件名讀取它。例如:

with open('test.txt') as f: 
  content = f.read() 
print('文件中的內(nèi)容為:', content) 

運(yùn)行效果如下圖所示:

使用Python如何正確讀取資源文件

但請注意,這里我是直接運(yùn)行的read.py這個文件。如果資源文件是存放在一個包(package)里面,然后我們在外面調(diào)用這個包里面的.py文件會怎么樣呢?我們試一試:

使用Python如何正確讀取資源文件

可以看到,現(xiàn)在Python 已經(jīng)找不到這個文件了。這是因?yàn)?,我們的入口程序?~/get_title文件夾中,而test.txt文件在~/get_title/util文件夾中。因?yàn)槲覀冞\(yùn)行的是main.py,所以 Python 會在~/get_title文件夾里面尋找test.txt,自然就找不到了。

如果是引用包里面的其他模塊,可以使用相對路徑。例如引用同一個包里面名叫sql_util.py里面的conn對象,我們可以直接寫為from .sql_util import conn。但是資源文件不能使用相對路徑來讀取,如下圖所示:

使用Python如何正確讀取資源文件

有一個笨辦法,就是獲取當(dāng)前正在運(yùn)行的這一行代碼所在的文件夾,然后拼出資源文件的完整路徑。修改 read.py 文件:

import os 
def read_file(): 
  current_folder = os.path.dirname(__file__) 
  resource_path = os.path.join(current_folder, 'test.txt') 
  with open(resource_path) as f: 
    content = f.read() 
  print('文件中的內(nèi)容為:', content) 

運(yùn)行效果如下圖所示:

使用Python如何正確讀取資源文件

但這樣寫稍顯麻煩。

如果你的 Python 版本不低于3.7,那么你可以使用importlib.resources來快速讀取資源文件:

from importlib import resources 
with resources.open_text('包名', '資源路徑') as f: 
  content = f.read() 

運(yùn)行效果如下圖所示:

使用Python如何正確讀取資源文件

如果你讀取的不是文本文件,那么你可以把resources.open_text改成resources.open_binary,從而讀取二進(jìn)制文件。

但需要注意的是,資源文件必須放在包的根目錄。這樣才能正確讀取。如果資源文件在包內(nèi)部的子目錄中,importlib.resources是不能直接讀取的。

例如我們的包為util,里面有一個文件夾叫做deep_folder,資源文件test.txt放在deep_folder中,此時,我們?nèi)绻x取這個資源文件,就必須把在deep_folder文件夾中創(chuàng)建一個init.py,把它也變成一個包。然后修改read.py的代碼:

from importlib import resources 
from . import deep_folder 

def read_file(): 
  with resources.open_text(deep_folder, 'test.txt') as f: 
    content = f.read() 
  print('文件中的內(nèi)容為:', content) 

把deep_folder作為一個 module 導(dǎo)入,然后把這個 module 作為resources.open_text的第一個參數(shù)。這樣才能正確讀取,如下圖所示:

使用Python如何正確讀取資源文件

關(guān)于使用Python如何正確讀取資源文件就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI