Re: [問題] 如何讀取特定格式檔案

看板Python作者 (  )時間6年前 (2019/05/01 22:50), 編輯推噓1(102)
留言3則, 1人參與, 6年前最新討論串2/2 (看更多)
後來就用re解決了 雖然寫出來不是很漂亮,但還是給需要的人參考 import numpy as np import re f=open('file') l1=f.readlines(1) # 先把頭兩行去掉 l2=f.readlines(1) data=f.readlines() f.close() ds= np.zeros([len(data)//3,10]) for i in range(len(data)//3): row0=data[3*i+0] row1=data[3*i+1] row2=data[3*i+2] d0=re.findall(r"[-+]?\d*\.\d+|\d+",row0) d0=[float(x) for x in d0] d1=re.findall(r"[-+]?\d*\.\d+|E\d+",row1) d1=[float(x) for x in d1] d2=re.findall(r"[-+]?\d*\.\d+|E\d+",row2) d2=[float(x) for x in d2] ds[i,0:3]=d0 ds[i,3:7]=d1 ds[i,7:10]=d2 -- 如果大家有更簡潔的寫法,也歡迎來交流一下 >"< ※ 引述《windless99 (  )》之銘言: : 各位大大好,我是從matlab轉到python的新手 : 現在有一組數據 前兩行是我不要的 : 後面的數據共有十欄,分別寫在三行 : 數據如下: : LD 1 37.0288004\n : 1301 10\n : 0 36.5288004 -0.5000000\n : 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00\n' : 0.0000000E+00 0.0000000E+00 0.0000000E+00\n' : 1 36.5376466 -0.4911538\n' : 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00\n' : 0.0000000E+00 0.0000000E+00 0.0000000E+00\n' : 2 36.5464927 -0.4823077\n' : 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00\n' : 0.0000000E+00 0.0000000E+00 0.0000000E+00\n : . : . : . : == : 以往用matlab可以用textscan讀取數據,即: : fid=fopen('檔案名稱') : fgetl(fid); : fgetl(fid); : data=textscan(fid,'%f %f %f \n %f %f %f %f \n %f %f %f'); : data=cell2mat(data); : fclose(fid); : 把數據讀取出來,讀出來的數據如下: : 0 140.057019200 -0.500000000 0 0 0 0 0 0 0 : 1 140.065865400 -0.491153800 0 0 0 0 0 0 0 : 2 140.074711500 -0.482307700 0 0 0 0 0 0 0 : . : . : . : 然而轉到python卻卡住了 QQ : 目前只寫出 : l1=f.readlines(1) : l2=f.readlines(1) : ds=f.readlines() : 數據會全部弄成同一欄 : 有上網查詢可以用np.loadtxt : 不過怎麼嘗試都失敗 : 請問各位大大該怎麼讀檔嗎? : 謝謝大家了 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.26.21.44 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1556722228.A.E11.html

05/02 02:46, 6年前 , 1F
所以原始資料 E 的後方沒有 + 的符號嗎?看你的正規規則沒寫
05/02 02:46, 1F

05/02 02:48, 6年前 , 2F
把所有的換行符號用一個空白取代,然後以10為單位去切割不知
05/02 02:48, 2F

05/02 02:48, 6年前 , 3F
可不可行
05/02 02:48, 3F
文章代碼(AID): #1SoR8quH (Python)
文章代碼(AID): #1SoR8quH (Python)