網站首頁 編程語言 正文
不知道大家有沒有過需要從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]]
原文鏈接:https://blog.csdn.net/u011699626/article/details/110944889
相關推薦
- 2022-11-03 tomcat?集群監控與彈性伸縮詳解_Tomcat
- 2024-01-09 idea如何設置自動換行
- 2022-03-05 Android中CountDownTimer類詳解_Android
- 2023-03-04 React使用redux基礎操作詳解_React
- 2022-05-25 RedisTemplate實現setnx分布式鎖
- 2022-11-14 mac 常用終端命令
- 2022-09-02 react?hooks閉包陷阱切入淺談_React
- 2023-03-16 windows下Docker部署Flask的詳細教程_docker
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支