作者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://webptt.com/cn.aspx?n=bbs/Python/M.1556722228.A.E11.html
1F:推 art1: 所以原始资料 E 的後方没有 + 的符号吗?看你的正规规则没写 05/02 02:46
2F:→ art1: 把所有的换行符号用一个空白取代,然後以10为单位去切割不知 05/02 02:48
3F:→ art1: 可不可行 05/02 02:48