python中讀取txt文件時(shí)split()函數(shù)的妙用
不知道大家有沒(méi)有過(guò)需要從txt文件中讀取含有多行多列的數(shù)據(jù)的經(jīng)歷,當(dāng)我們讀入數(shù)據(jù)時(shí),數(shù)據(jù)會(huì)以string的形式被讀入,然而如何進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換就成了大的問(wèn)題。
這里介紹一種最簡(jiǎn)單的方式和容易產(chǎn)生的錯(cuò)誤使用方法。
txt測(cè)試文件中的數(shù)據(jù)如下

我們使用如下代碼讀取文件,使用readlines()一次性將所有數(shù)據(jù)全部讀取。
with open(r"C:\Users\15025\Desktop\debug1.txt", "r") as f:
all_data = f.readlines()
print(all_data)
# ['6.317438621610765E-05 6.123920173773844E-05 0.00010382572761752979\n', '0.00010819194873178063 8.848784016828921E-05 0.0002043378699454479\n', '9.79660835582763E-05 9.750829986943346E-05 0.00021506758227284687']我們不難發(fā)現(xiàn)這時(shí)我們的所有數(shù)據(jù)都被讀入了同一行,但是內(nèi)部有三個(gè)單引號(hào)括起來(lái)的部分,與我們測(cè)試數(shù)據(jù)中的三行吻合。
我們也可以看到,我們需要將這些數(shù)據(jù)分成單獨(dú)的string,然后我們就可以使用例如float關(guān)鍵字對(duì)這些數(shù)據(jù)進(jìn)行類型轉(zhuǎn)換。
我們看到數(shù)據(jù)之間是通過(guò)空格來(lái)分開(kāi)的。我們第一時(shí)間想到我們應(yīng)該使用.split(" ")方法以空格將數(shù)據(jù)分開(kāi)。
我們嘗試以下代碼
with open(r"C:\Users\15025\Desktop\debug1.txt", "r") as f:
all_data = f.readlines()
all_data = all_data[0].split(" ")
print(all_data)
# ['6.317438621610765E-05', '', '6.123920173773844E-05', '', '0.00010382572761752979\n']首先我們需要選取第一行,使用all_data[0],然后再使用split(" ")函數(shù)分開(kāi)它們。
我們成功達(dá)到了目的,但是我們同時(shí)引入了""空字符串項(xiàng)和末尾處\n的隱患,很是棘手。
這么做我們就進(jìn)入了誤區(qū)。
正確地做法如下
with open(r"C:\Users\15025\Desktop\debug1.txt", "r") as f:
all_data = f.readlines()
all_data = all_data[0].split()
print(all_data)
# ['6.317438621610765E-05', '6.123920173773844E-05', '0.00010382572761752979']我們使用split()函數(shù)時(shí)不添加任何參數(shù),這樣就一次性去掉了""空字符串項(xiàng)和末尾處\n的隱患還同時(shí)分開(kāi)了各個(gè)字符串。
如果需要輸出多行的結(jié)果,我們可以預(yù)先定義一個(gè)數(shù)組,用來(lái)存放我們的數(shù)據(jù),完整代碼如下:(以后所有的多行多列數(shù)據(jù)均可以如此讀入)
方法一:將數(shù)據(jù)以二維列表形式讀入
array2d = []
with open(r"C:\Users\15025\Desktop\debug1.txt", "r") as f:
all_data = f.readlines()
for i in range(len(all_data)):
temp_list = []
for element in all_data[i].split():
temp_list.append(float(element))
array2d.append(temp_list)
print(array2d)
#[[6.31743862e-05, 6.12392017e-05, 0.000103825728],
# [0.000108191949, 8.84878402e-05, 0.00020433787],
# [9.79660836e-05, 9.75082999e-05, 0.000215067582]]方法二:將數(shù)據(jù)以二維數(shù)組形式讀入
import numpy as np
array = np.zeros((3, 3))
with open(r"C:\Users\15025\Desktop\debug1.txt", "r") as f:
all_data = f.readlines()
for i, line in enumerate(all_data):
numbers = line.split()
for j, element in enumerate(numbers):
array[i, j] = float(element)
print(array)
# [[6.31743862e-05 6.12392017e-05 1.03825728e-04]
# [1.08191949e-04 8.84878402e-05 2.04337870e-04]
# [9.79660836e-05 9.75082999e-05 2.15067582e-04]]以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Python模塊化--模塊(Modules)和包(Packages)
這篇文章主要介紹了使用Python的模塊(Modules)和包(Packages),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-08-08
python多進(jìn)程登錄遠(yuǎn)端服務(wù)器
這篇文章主要介紹了python多進(jìn)程登錄遠(yuǎn)端服務(wù)器,文章應(yīng)用實(shí)例簡(jiǎn)易的方式詳細(xì)講解python多進(jìn)程登錄遠(yuǎn)端服務(wù)器的相關(guān)資料,需要的朋友可以參考以下文章的具體內(nèi)容2021-10-10
深度學(xué)習(xí)的MNIST手寫(xiě)數(shù)字?jǐn)?shù)據(jù)集識(shí)別方式(準(zhǔn)確率99%,附代碼)
這篇文章主要介紹了深度學(xué)習(xí)的MNIST手寫(xiě)數(shù)字?jǐn)?shù)據(jù)集識(shí)別方式(準(zhǔn)確率99%,附代碼),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
Python使用plt庫(kù)實(shí)現(xiàn)繪制動(dòng)態(tài)曲線圖并導(dǎo)出為GIF或MP4
這篇文章主要為大家詳細(xì)介紹了Python如何使用plt庫(kù)實(shí)現(xiàn)繪制動(dòng)態(tài)曲線圖并導(dǎo)出為GIF或MP4,文中的示例代碼講解詳細(xì),需要的可以了解一下2024-03-03
python pandas dataframe如何獲取除了指定列以外的所有列
這篇文章主要介紹了python pandas dataframe如何獲取除了指定列以外的所有列問(wèn)題,具有很好的參考價(jià)值,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
Python中多線程thread與threading的實(shí)現(xiàn)方法
這篇文章主要介紹了Python中多線程thread與threading的實(shí)現(xiàn)方法,很重要的應(yīng)用,需要的朋友可以參考下2014-08-08

