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