python中讀取txt文件時(shí)split()函數(shù)的妙用
不知道大家有沒有過需要從txt文件中讀取含有多行多列的數(shù)據(jù)的經(jīng)歷,當(dāng)我們讀入數(shù)據(jù)時(shí),數(shù)據(jù)會以string的形式被讀入,然而如何進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換就成了大的問題。
這里介紹一種最簡單的方式和容易產(chǎn)生的錯(cuò)誤使用方法。
txt測試文件中的數(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è)單引號括起來的部分,與我們測試數(shù)據(jù)中的三行吻合。
我們也可以看到,我們需要將這些數(shù)據(jù)分成單獨(dú)的string,然后我們就可以使用例如float關(guān)鍵字對這些數(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à)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12
python 實(shí)現(xiàn)字符串下標(biāo)的輸出功能
這篇文章主要介紹了python 簡單的實(shí)現(xiàn)字符串下標(biāo)的輸出,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02
Python利用Bokeh進(jìn)行數(shù)據(jù)可視化的教程分享
Bokeh是Python中的數(shù)據(jù)可視化庫,提供高性能的交互式圖表和繪圖。本文將利用Bokeh繪制一些可視化圖表,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-08-08
使用Django Form解決表單數(shù)據(jù)無法動態(tài)刷新的兩種方法
這篇文章主要介紹了使用Django Form解決表單數(shù)據(jù)無法動態(tài)刷新的兩種方法,需要的朋友可以參考下2017-07-07

