Python 讀取位於包中的資料檔案

2022-09-26 18:27:09 字數 854 閱讀 9556

問題

你的包中包含**需要去讀取的資料檔案。你需要盡ymlgnnbj可能地用最便捷的方式來做這件事。程式設計客棧

解決方案

假設你的包中的檔案組織成如下:

mypackage/

__init__.py

somedata.dat

spam.py

現在假設spam.py檔案需要讀取somedata.dat檔案中的內容。ymlgnnbj你可以用以下**來完成:

# spam.py

import pkgutil

data = pkgutil.get_data(__package__, 'somedata.dat')

由此產生的變數是包含該檔案的原始內容的位元組字串。

討論要讀取資料檔案,你可能會傾向於編寫使用內建的i/ o功能的**,如open()。但是這種方法也有一些問題。

首先,乙個包對直譯器的當前工作目錄幾乎沒有控制權。因此,程式設計時任何i/o操作都必須使用絕對檔名。由於每個模組包含有完整路徑的__file__變數,這弄清楚它的路徑不是不可能,但它很凌亂。

第二,包通常安裝作為.zip或.egg檔案,這些檔案並不像在檔案系統上的乙個普通目錄裡那樣被儲存。因此,你試圖用open()對乙個包含資料檔案的歸檔檔案進行操作,它根本不會工作。

pkgutil.get_data()函式是乙個讀取資料檔案的高階工具,不用管包是如何安裝以及安裝在哪。它只是工作並將檔案內容以位元組字串返回給你

get_data()的第乙個引數是包含包名的字串。你可以直接使用包名,也可以www.cppcns.com使用特殊的變數,比如__package__。第二個引數是包內檔案的相對名稱。如果有必要,可以使用標準的unix命名規範到不同的目錄,只要最後的目錄仍然位於包中。

python中包 python中的包

使用模組可以避免函式名和變數名引發的衝突,那麼如果模組名重複怎麼辦?在python中,提出了包的概念 package 的概念,包是乙個分層次的目錄結構,它將一組功能相近的模組組織在乙個目錄下,這樣既起到了規範 的作用,又能避免模組重名引發的衝突。說明 包簡單的理 解就是 資料夾 只不過是在該資料夾下...

python中的包 python中的包

1.python中的包 包將有聯絡的模組組織在一起,有效避免模組名稱衝突問題,讓應用組織結構更加清晰 假定我們的包的例子有如下的目錄結構 phone init py common util.py voicedta init py pots.py isdn.py fax init py g3.py m...

python 中位於運算子 應用

運算子在計算機中是二進位制運算子,常使用 即先進性位於運算子,在進行賦值,例如 a b 等價於 a a b。位於運算只二進位制 保同除異 a 3 a 011 b 2 b 010 a b a 010 print a a 2題目描述 輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。計算...