作者windless99 ( )
看板Python
標題Re: [問題] 如何讀取特定格式檔案
時間Wed May 1 22:50:26 2019
後來就用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
推 art1: 所以原始資料 E 的後方沒有 + 的符號嗎?看你的正規規則沒寫 05/02 02:46
→ art1: 把所有的換行符號用一個空白取代,然後以10為單位去切割不知 05/02 02:48
→ art1: 可不可行 05/02 02:48