網(wǎng)站首頁 編程語言 正文
不知道大家有沒有過需要從txt
文件中讀取含有多行多列的數(shù)據(jù)的經(jīng)歷,當(dāng)我們讀入數(shù)據(jù)時(shí),數(shù)據(jù)會(huì)以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]]
原文鏈接:https://blog.csdn.net/u011699626/article/details/110944889
相關(guān)推薦
- 2022-09-03 Go語言中的變量和常量_Golang
- 2022-06-12 C語言函數(shù)指針數(shù)組實(shí)現(xiàn)計(jì)算器功能_C 語言
- 2022-05-18 Qt?關(guān)于容器的遍歷迭代器的使用問題小結(jié)_C 語言
- 2022-02-15 使用數(shù)學(xué)軟件Matlab建模畫圖程序匯總_其它綜合
- 2022-06-04 CZGL.ProcessMetrics監(jiān)控.NET應(yīng)用_實(shí)用技巧
- 2022-05-26 Nginx多個(gè)前端服務(wù)配置方式詳解_nginx
- 2023-09-12 如何升級spring boot中spring框架的版本
- 2022-10-28 C++異步操作future和aysnc與function和bind_C 語言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支