在使用python程式時,經常會遇到自定義的包內包含資料檔案的情況,這時如果使用者想從外部呼叫包內方法時,就會出現無法找到資料檔案的錯誤。這裡介紹了使用 pkgutil模組 來解決該類問題的方法。
以前寫了乙個計算放射性毒性計算的程式,每次計算時需要將輸入檔案與程式以及依賴的資料檔案放在乙個目錄下,計算結束後,輸出檔案也在同樣的目錄下,這樣就需要每次計算時都要拷貝乙份程式和依賴的資料檔案,非常麻煩,所以決定修改程式結構,將原來的毒性計算程式做成包的形式,這樣就可以無需拷貝計算程式而在任意目錄下進行呼叫計算,和結果的輸出。但是在修改程式過程中發現,由於原計算程式需要讀取很多依賴的資料檔案,這樣在包外部呼叫該計算程式的時候會出現找不到檔案的錯誤。經過查詢解決方案,最終決定選擇使用 pkgutil模組 來解決該類問題。
通過在原計算程式中加入
import pkgutil
defgetdatainpackage
(filename)
: data_bytes = pkgutil.get_data(__package__, filename)
data_str = data_bytes.decode(
"utf8"
)return data_str
其中get_data 可以用來從乙個包中的資料檔案中獲取資料,由於該函式返回的是 binary string,所以需要解碼成string型別。
在使用上述getdatainpackage函式返回的資料進行操作時,由於需要對原來的文字資料一行行進行操作,所以使用了split函式,但需要注意換行符的問題。在打字機時代就有了這幾個符號的設計,其實』\r』的本意是回到行首,』\n』的本意是換行。所以回車相當於做的是』\r\n』或者』\n\r』。到了計算機時代沿用了這個符號設計,但是估計是換行並回行首是一體的了基本上,所以出現了這幾種設計:』\r』就是換行並回行首,』\n』就是換行並回行首,用』\r\n』表示換行並回行首。其中windows是』\r\n』,linux是』\n』。因此在windows系統下,split函式需要傳入引數』\r\n』
nuclid = getdatainpackage(filename)
.split(
'\r\n'
)
不能寫成:
nuclid = getdatainpackage(filename)
.split(
'\n'
)
否則會出現不必要的問題。
使用 pkgutil模組 可以用來讀取包內包含資料檔案,但需要注意一些二進位制字元碼轉碼的問題。
Python 讀取位於包中的資料檔案
問題 你的包中包含 需要去讀取的資料檔案。你需要盡ymlgnnbj可能地用最便捷的方式來做這件事。程式設計客棧 解決方案 假設你的包中的檔案組織成如下 mypackage init py somedata.dat spam.py 現在假設spam.py檔案需要讀取somedata.dat檔案中的內容...
Python讀取測試資料檔案
在日常測試過程中,經常遇到需要讀取測試資料檔案,這邊就涉及到乙個檔案讀取的方法。這篇文章主要以python讀取檔案的基礎方法為本,包括讀取excel檔案 yaml檔案 csv檔案。下面是具體實現方式 import openpyxl import yaml import csv from conf.c...
MATLAB資料檔案讀取
matlab可以匯入.txt,csv等格式的資料檔案,下面對其進行簡單的說明。1 匯入.txt文字資料 函式格式如下 a importdata filename example a importdata pastespecial example a importdata delimiterin a ...