Python 讀取位于包中的數(shù)據(jù)文件
問(wèn)題
你的包中包含代碼需要去讀取的數(shù)據(jù)文件。你需要盡可能地用最便捷的方式來(lái)做這件事。
解決方案
假設(shè)你的包中的文件組織成如下:
mypackage/ __init__.py somedata.dat spam.py
現(xiàn)在假設(shè)spam.py文件需要讀取somedata.dat文件中的內(nèi)容。你可以用以下代碼來(lái)完成:
# spam.pyimport pkgutildata = pkgutil.get_data(__package__, ’somedata.dat’)
由此產(chǎn)生的變量是包含該文件的原始內(nèi)容的字節(jié)字符串。
討論
要讀取數(shù)據(jù)文件,你可能會(huì)傾向于編寫(xiě)使用內(nèi)置的I/ O功能的代碼,如open()。但是這種方法也有一些問(wèn)題。
首先,一個(gè)包對(duì)解釋器的當(dāng)前工作目錄幾乎沒(méi)有控制權(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)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. React+umi+typeScript創(chuàng)建項(xiàng)目的過(guò)程2. ASP中常用的22個(gè)FSO文件操作函數(shù)整理3. 解決ASP中http狀態(tài)跳轉(zhuǎn)返回錯(cuò)誤頁(yè)的問(wèn)題4. ASP調(diào)用WebService轉(zhuǎn)化成JSON數(shù)據(jù),附j(luò)son.min.asp5. 三個(gè)不常見(jiàn)的 HTML5 實(shí)用新特性簡(jiǎn)介6. ASP編碼必備的8條原則7. SharePoint Server 2019新特性介紹8. 無(wú)線標(biāo)記語(yǔ)言(WML)基礎(chǔ)之WMLScript 基礎(chǔ)第1/2頁(yè)9. ASP.NET Core 5.0中的Host.CreateDefaultBuilder執(zhí)行過(guò)程解析10. Warning: require(): open_basedir restriction in effect,目錄配置open_basedir報(bào)錯(cuò)問(wèn)題分析
