欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python中讀取txt文件時split()函數(shù)的妙用

 更新時間:2022年11月03日 11:22:07   作者:勤奮的大熊貓  
這篇文章主要介紹了python中讀取txt文件時split()函數(shù)的妙用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

不知道大家有沒有過需要從txt文件中讀取含有多行多列的數(shù)據(jù)的經(jīng)歷,當(dāng)我們讀入數(shù)據(jù)時,數(shù)據(jù)會以string的形式被讀入,然而如何進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換就成了大的問題。

這里介紹一種最簡單的方式和容易產(chǎn)生的錯誤使用方法。

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ù)據(jù)都被讀入了同一行,但是內(nèi)部有三個單引號括起來的部分,與我們測試數(shù)據(jù)中的三行吻合。

我們也可以看到,我們需要將這些數(shù)據(jù)分成單獨的string,然后我們就可以使用例如float關(guān)鍵字對這些數(shù)據(jù)進(jìn)行類型轉(zhuǎn)換。

我們看到數(shù)據(jù)之間是通過空格來分開的。我們第一時間想到我們應(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á)到了目的,但是我們同時引入了""空字符串項和末尾處\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ù),這樣就一次性去掉了""空字符串項和末尾處\n的隱患還同時分開了各個字符串。

如果需要輸出多行的結(jié)果,我們可以預(yù)先定義一個數(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]]

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論