Python 讀取位于包中的數(shù)據(jù)文件
問題
你的包中包含代碼需要去讀取的數(shù)據(jù)文件。你需要盡可能地用最便捷的方式來做這件事。
解決方案
假設(shè)你的包中的文件組織成如下:
mypackage/
__init__.py
somedata.dat
spam.py
現(xiàn)在假設(shè)spam.py文件需要讀取somedata.dat文件中的內(nèi)容。你可以用以下代碼來完成:
# spam.py import pkgutil data = pkgutil.get_data(__package__, 'somedata.dat')
由此產(chǎn)生的變量是包含該文件的原始內(nèi)容的字節(jié)字符串。
討論
要讀取數(shù)據(jù)文件,你可能會傾向于編寫使用內(nèi)置的I/ O功能的代碼,如open()。但是這種方法也有一些問題。
首先,一個包對解釋器的當(dāng)前工作目錄幾乎沒有控制權(quán)。因此,編程時任何I/O操作都必須使用絕對文件名。由于每個模塊包含有完整路徑的__file__變量,這弄清楚它的路徑不是不可能,但它很凌亂。
第二,包通常安裝作為.zip或.egg文件,這些文件并不像在文件系統(tǒng)上的一個普通目錄里那樣被保存。因此,你試圖用open()對一個包含數(shù)據(jù)文件的歸檔文件進行操作,它根本不會工作。
pkgutil.get_data()函數(shù)是一個讀取數(shù)據(jù)文件的高級工具,不用管包是如何安裝以及安裝在哪。它只是工作并將文件內(nèi)容以字節(jié)字符串返回給你
get_data()的第一個參數(shù)是包含包名的字符串。你可以直接使用包名,也可以使用特殊的變量,比如__package__。第二個參數(shù)是包內(nèi)文件的相對名稱。如果有必要,可以使用標(biāo)準(zhǔn)的Unix命名規(guī)范到不同的目錄,只要最后的目錄仍然位于包中。
以上就是Python 讀取位于包中的數(shù)據(jù)文件的詳細內(nèi)容,更多關(guān)于Python 讀取數(shù)據(jù)文件的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python轉(zhuǎn)換pkl模型文件為txt文件問題
這篇文章主要介紹了python轉(zhuǎn)換pkl模型文件為txt文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06詳解Python的Django框架中manage命令的使用與擴展
這篇文章主要介紹了Python的Django框架中manage命令的使用與擴展,manage.py使得用戶借助manage命令在命令行中能實現(xiàn)諸多簡便的操作,需要的朋友可以參考下2016-04-04Python騷操作完美實現(xiàn)短視頻偽原創(chuàng)
剪輯的視頻上傳到某平臺碰到降權(quán)怎么辦?視頻平臺都有一套自己的鑒別算法,專門用于處理視頻的二次剪輯,本篇我們來用python做一些特殊處理2022-02-02Python實現(xiàn)讀取郵箱中的郵件功能示例【含文本及附件】
這篇文章主要介紹了Python實現(xiàn)讀取郵箱中的郵件功能,可讀取郵件文本及附件的功能,涉及Python針對郵件的獲取、分析、保存等相關(guān)操作技巧,需要的朋友可以參考下2017-08-08Python遠程開發(fā)環(huán)境部署與調(diào)試過程圖解
這篇文章主要介紹了Python遠程開發(fā)環(huán)境部署與調(diào)試過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-12-12