python 讀取txt檔案時split()函式的妙用
阿新 • • 發佈:2020-12-13
不知道大家有沒有過需要從txt
檔案中讀取含有多行多列的資料的經歷,當我們讀入資料時,資料會以string
的形式被讀入,然而如何進行資料型別轉換就成了大的問題。這裡介紹一種最簡單的方式和容易產生的錯誤使用方法。
txt
測試檔案中的資料如下:
我們使用如下程式碼讀取檔案,使用readlines()
一次性將所有資料全部讀取。
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']
我們不難發現這時我們的所有資料都被讀入了同一行,但是內部有三個單引號括起來的部分,與我們測試資料中的三行吻合。我們也可以看到,我們需要將這些資料分成單獨的string
,然後我們就可以使用例如float
.split(" ")
方法以空格將資料分開。我們嘗試以下程式碼:
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(" ")
函式分開他們。我們可以達到了目標,但是我們同時引入了""
空字串項和末尾處\n
的隱患,很是棘手。這麼做我們就進入了誤區。正確地做法如下:
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()
函式時不新增任何引數,這樣就一次性去掉了""
空字串項和末尾處\n
的隱患還同時分開了各個字串。如果需要輸出多行的結果,我們可以預先定義一個數組,用來存放我們的資料,完整程式碼如下:(所有的資料以後均可以如此讀入)
import matplotlib.pyplot as plt
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]]
如果大家覺得有用,請高抬貴手給一個贊讓我上推薦讓更多的人看到吧~