python中讀取txt文件時split()函數的妙用
不知道大傢有沒有過需要從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
的隱患還同時分開瞭各個字符串。
如果需要輸出多行的結果,我們可以預先定義一個數組,用來存放我們的數據,完整代碼如下:(以後所有的多行多列數據均可以如此讀入)
方法一:將數據以二維列表形式讀入
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]]
方法二:將數據以二維數組形式讀入
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]]
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- 如何用python清洗文件中的數據
- Python 如何讀取.txt,.md等文本文件
- Python實現聚類K-means算法詳解
- python神經網絡編程之手寫數字識別
- Python中的枚舉函數enumerate()的具體用法