c++读取txt文件中的数字_在Python中读取包中的数据文件的三种方式
我們知道,寫Python代碼的時候,如果一個包(package)里面的一個模塊要導入另一個模塊,那么我們可以使用相對導入:
假設當前代碼結構如下圖所示:
其中test_1是一個包,在util.py里面想導入同一個包里面的read.py中的read函數,那么代碼可以寫為:
from .read import readdef util():read()其中的.read表示當前包目錄下的read.py文件。此時read.py文件中的內容如下:
def read():print('閱讀文件')通過包外面的main.py運行代碼,運行效果如下圖所示:
現在,我們增加一個數據文件,data.txt,它的內容如下圖所示:
并且想通過read.py去讀取這個數據文件并打印出來。
修改read.py,試圖使用相對路徑來打開這個文件:
def read():with open('./data.txt', encoding='utf-8') as f:text = f.read()print(text)運行代碼發現報錯:
這個原因很簡單,就是如果數據文件的地址寫為:./data.txt,那么Python就會從當前工作區文件夾里面尋找data.txt。由于我們運行的是main.py,那么當前工作區就是main.py所在的文件夾,而不是test_1文件夾。所以就會出現找不到文件的情況。
為了解決這個問題,我們有三種解決方式。
- 使用絕對路徑
運行效果如下圖所示:
- 先獲取read.py文件的絕對路徑,再拼接出數據文件的絕對路徑:
運行效果如下圖所示:
- 使用pkgutil庫
運行效果如下圖所示:
pkgutil是Python自帶的用于包管理相關操作的庫,pkgutil能根據包名找到包里面的數據文件,然后讀取為bytes型的數據。如果數據文件內容是字符串,那么直接decode()以后就是正文內容了。
為什么pkgutil讀取的數據文件是bytes型的內容而不直接是字符串類型? 這是因為并不是所有數據文件都是字符串,如果某些數據文件是二進制文件或者圖片,那么以字符串方式打開就會導致報錯。所以為了通用,pkgutil會以bytes型方式讀入數據,這相當于open函數的“rb”讀取方式。使用pkgutil還有一個好處,就是只要知道包名就可以找到對應包下面的數據文件,數據文件并不一定要在當前包里面。
例如修改代碼結構如下圖所示:
另一個包test_2里面有一個數據文件data2.txt。此時如果要在teat_1包的read.py中讀取data2.txt中的內容,那么只需要修改pkgutil.get_data的第一個參數為test_2和數據文件的名字即可,運行效果如下圖所示:
而前兩種方法都不如pkgutil簡單。
所以使用pkgutil可以大大簡化讀取包里面的數據文件的代碼。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的c++读取txt文件中的数字_在Python中读取包中的数据文件的三种方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: debug assertion fail
- 下一篇: twitter api 无法连接_光大银