日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++读取txt文件中的数字_在Python中读取包中的数据文件的三种方式

發(fā)布時間:2024/10/6 c/c++ 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++读取txt文件中的数字_在Python中读取包中的数据文件的三种方式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我們知道,寫Python代碼的時候,如果一個包(package)里面的一個模塊要導(dǎo)入另一個模塊,那么我們可以使用相對導(dǎo)入:

假設(shè)當(dāng)前代碼結(jié)構(gòu)如下圖所示:

其中test_1是一個包,在util.py里面想導(dǎo)入同一個包里面的read.py中的read函數(shù),那么代碼可以寫為:

from .read import readdef util():read()

其中的.read表示當(dāng)前包目錄下的read.py文件。此時read.py文件中的內(nèi)容如下:

def read():print('閱讀文件')

通過包外面的main.py運行代碼,運行效果如下圖所示:

現(xiàn)在,我們增加一個數(shù)據(jù)文件,data.txt,它的內(nèi)容如下圖所示:

并且想通過read.py去讀取這個數(shù)據(jù)文件并打印出來。

修改read.py,試圖使用相對路徑來打開這個文件:

def read():with open('./data.txt', encoding='utf-8') as f:text = f.read()print(text)

運行代碼發(fā)現(xiàn)報錯:

這個原因很簡單,就是如果數(shù)據(jù)文件的地址寫為:./data.txt,那么Python就會從當(dāng)前工作區(qū)文件夾里面尋找data.txt。由于我們運行的是main.py,那么當(dāng)前工作區(qū)就是main.py所在的文件夾,而不是test_1文件夾。所以就會出現(xiàn)找不到文件的情況。

為了解決這個問題,我們有三種解決方式。

  • 使用絕對路徑
def read():with open('/Users/kingname/Project/DataFileExample/test_1/data.txt', encoding='utf-8') as f:text = f.read()print(text)

運行效果如下圖所示:

  • 先獲取read.py文件的絕對路徑,再拼接出數(shù)據(jù)文件的絕對路徑:
import osdef read():basepath = os.path.abspath(__file__)folder = os.path.dirname(basepath)data_path = os.path.join(folder, 'data.txt')with open(data_path, encoding='utf-8') as f:text = f.read()print(text)

運行效果如下圖所示:

  • 使用pkgutil庫
import pkgutildef read():data_bytes = pkgutil.get_data(__package__, 'data.txt')data_str = data_bytes.decode()print(data_str)

運行效果如下圖所示:

pkgutil是Python自帶的用于包管理相關(guān)操作的庫,pkgutil能根據(jù)包名找到包里面的數(shù)據(jù)文件,然后讀取為bytes型的數(shù)據(jù)。如果數(shù)據(jù)文件內(nèi)容是字符串,那么直接decode()以后就是正文內(nèi)容了。

為什么pkgutil讀取的數(shù)據(jù)文件是bytes型的內(nèi)容而不直接是字符串類型? 這是因為并不是所有數(shù)據(jù)文件都是字符串,如果某些數(shù)據(jù)文件是二進制文件或者圖片,那么以字符串方式打開就會導(dǎo)致報錯。所以為了通用,pkgutil會以bytes型方式讀入數(shù)據(jù),這相當(dāng)于open函數(shù)的“rb”讀取方式。

使用pkgutil還有一個好處,就是只要知道包名就可以找到對應(yīng)包下面的數(shù)據(jù)文件,數(shù)據(jù)文件并不一定要在當(dāng)前包里面。

例如修改代碼結(jié)構(gòu)如下圖所示:

另一個包test_2里面有一個數(shù)據(jù)文件data2.txt。此時如果要在teat_1包的read.py中讀取data2.txt中的內(nèi)容,那么只需要修改pkgutil.get_data的第一個參數(shù)為test_2和數(shù)據(jù)文件的名字即可,運行效果如下圖所示:

而前兩種方法都不如pkgutil簡單。

所以使用pkgutil可以大大簡化讀取包里面的數(shù)據(jù)文件的代碼。

與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的c++读取txt文件中的数字_在Python中读取包中的数据文件的三种方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。