W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
你的包中包含代碼需要去讀取的數據文件。你需要盡可能地用最便捷的方式來做這件事。
假設你的包中的文件組織成如下:
mypackage/
__init__.py
somedata.dat
spam.py
現在假設spam.py文件需要讀取somedata.dat文件中的內容。你可以用以下代碼來完成:
# spam.py
import pkgutil
data = pkgutil.get_data(__package__, 'somedata.dat')
由此產生的變量是包含該文件的原始內容的字節(jié)字符串。
要讀取數據文件,你可能會傾向于編寫使用內置的I/ O功能的代碼,如open()。但是這種方法也有一些問題。
首先,一個包對解釋器的當前工作目錄幾乎沒有控制權。因此,編程時任何I/O操作都必須使用絕對文件名。由于每個模塊包含有完整路徑的file變量,這弄清楚它的路徑不是不可能,但它很凌亂。
第二,包通常安裝作為.zip或.egg文件,這些文件像文件系統上的一個普通目錄一樣不會被保留。因此,你試圖用open()對一個包含數據文件的歸檔文件進行操作,它根本不會工作。
pkgutil.get_data()函數是一個讀取數據文件的高級工具,不用管包是如何安裝以及安裝在哪。它只是工作并將文件內容以字節(jié)字符串返回給你
get_data()的第一個參數是包含包名的字符串。你可以直接使用包名,也可以使用特殊的變量,比如package。第二個參數是包內文件的相對名稱。如果有必要,可以使用標準的Unix命名規(guī)范到不同的目錄,只有最后的目錄仍然位于包中。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯系方式:
更多建議: