python中讀取txt文件時(shí)split()函數(shù)的妙用
不知道大家有沒有過需要從txt
文件中讀取含有多行多列的數(shù)據(jù)的經(jīng)歷,當(dāng)我們讀入數(shù)據(jù)時(shí),數(shù)據(jù)會(huì)以string
的形式被讀入,然而如何進(jìn)行數(shù)據(jù)類型轉(zhuǎ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)括起來的部分,與我們測(cè)試數(shù)據(jù)中的三行吻合。
我們也可以看到,我們需要將這些數(shù)據(jù)分成單獨(dú)的string
,然后我們就可以使用例如float
關(guān)鍵字對(duì)這些數(shù)據(jù)進(jìn)行類型轉(zhuǎn)換。
我們看到數(shù)據(jù)之間是通過空格來分開的。我們第一時(shí)間想到我們應(yīng)該使用.split(" ")
方法以空格將數(shù)據(jù)分開。
我們嘗試以下代碼
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ù)分開它們。
我們成功達(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í)分開了各個(gè)字符串。
如果需要輸出多行的結(jié)果,我們可以預(yù)先定義一個(gè)數(shù)組,用來存放我們的數(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)文章
pandas的相關(guān)系數(shù)與協(xié)方差實(shí)例
今天小編就為大家分享一篇pandas的相關(guān)系數(shù)與協(xié)方差實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12python 實(shí)現(xiàn)字符串下標(biāo)的輸出功能
這篇文章主要介紹了python 簡(jiǎn)單的實(shí)現(xiàn)字符串下標(biāo)的輸出,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02Python利用Bokeh進(jìn)行數(shù)據(jù)可視化的教程分享
Bokeh是Python中的數(shù)據(jù)可視化庫(kù),提供高性能的交互式圖表和繪圖。本文將利用Bokeh繪制一些可視化圖表,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-08-08使用Django Form解決表單數(shù)據(jù)無法動(dòng)態(tài)刷新的兩種方法
這篇文章主要介紹了使用Django Form解決表單數(shù)據(jù)無法動(dòng)態(tài)刷新的兩種方法,需要的朋友可以參考下2017-07-07