我在阅读看起来像这样的表时遇到了问题:
$TITLE = 1
$SUBTITLE= 2
$LABEL = SUBCASE - STATIC LOADS 1 3
$DISPLACEMENTS 4
$REAL OUTPUT 5
$SUBCASE ID = 1 6
1 G 1.100698E-02 1.961111E-03 -1.888102E-01 7
-CONT- 0.000000E+00 0.000000E+00 0.000000E+00 8
2 G 1.099767E-02 1.947526E-03 -1.814562E-01 9
-CONT- 0.000000E+00 0.000000E+00 0.000000E+00 10
3 G 1.097209E-02 1.915010E-03 -1.741153E-01 11
-CONT- 0.000000E+00 0.000000E+00 0.000000E+00 12
4 G 1.093050E-02 1.873149E-03 -1.667979E-01 13
-CONT- 0.000000E+00 0.000000E+00 0.000000E+00 14
5 G 1.087178E-02 1.827145E-03 -1.595153E-01 15
-CONT- 0.000000E+00 0.000000E+00 0.000000E+00 16
我想要的是这样:
1.100698E-02 1.961111E-03 -1.888102E-01 0.000000E+00 0.000000E+00 0.000000E+00
1.099767E-02 1.947526E-03 -1.814562E-01 0.000000E+00 0.000000E+00 0.000000E+00
1.097209E-02 1.915010E-03 -1.741153E-01 0.000000E+00 0.000000E+00 0.000000E+00
1.093050E-02 1.873149E-03 -1.667979E-01 0.000000E+00 0.000000E+00 0.000000E+00
1.087178E-02 1.827145E-03 -1.595153E-01 0.000000E+00 0.000000E+00 0.000000E+00
所以我尝试了几件事,但我总是遇到一些问题。
首先我尝试通过numpy.loadtxt加载数据,省略标题行。但是我在获取正确的数据类型时遇到了问题。当我用dtype = string读取它时,我无法将其正确转换为浮动。
PunchData = loadtxt(PunchFile,skiprows = 6)
ValueError:无法将字符串转换为float:G
之后我尝试使用genfromtxt来填充所有空列,因此他可以将其读作二次数组。但我无法使用,因为列数不匹配 - > number和G产生2列,-cont-产生1列。
kwargs = dict(dtype = float,
skip_header = 6,
missing_values = {0:“”,1:“”,2:“”,3:“”,4:“”,5:“”},
filling_values = {0:0,1:0,2:0,3:0,4:0,5:0})
PunchData = genfromtxt(PunchFile,** kwargs)
ValueError:检测到一些错误!
第8行(有5列而不是6列)
10号线(有5列而不是6列)
第12行(有5列而不是6列)
第14行(有5列而不是6列)
第16行(有5列而不是6列)
作为最后一种方法,我试图用readlines读取数据,但这与第一种方法的结果相同。我有一些字符串,我无法将其转换为numpy数组。
f = open(PunchFile)
线= f.readlines()
线=线[6:]
数据= []
换行:
data.append(线[24:])
['1.100698E-02 1.961111E-03 -1.888102E-01 7 \ n',
'0.000000E + 00 0.000000E + 00 0.000000E + 00 8 \ n',
'1.099767E-02 1.947526E-03 -1.814562E-01 9 \ n',
'0.000000E + 00 0.000000E + 00 0.000000E + 00 10 \ n',
'1.097209E-02 1.915010E-03 -1.741153E-01 11 \ n',
'0.000000E + 00 0.000000E + 00 0.000000E + 00 12 \ n',
'1.093050E-02 1.873149E-03 -1.667979E-01 13 \ n',
'0.000000E + 00 0.000000E + 00 0.000000E + 00 14 \ n',
'1.087178E-02 1.827145E-03 -1.595153E-01 15 \ n',
'0.000000E + 00 0.000000E + 00 0.000000E + 00 16']
所以我真的很挣扎,不知道该怎么做。你们可以帮助我吗?
答案 0 :(得分:0)
只需手动处理 即可。您的行包含固定大小字段,后缀是行号,前缀可以是:
所以你必须:
$
-CONT-
开始到前一行,但跳过18个字符-CONT-
它产生以下代码:
PuchData = []
with open(PunchFile) as fd:
old = None
for line in fd:
if line.startswith('$'): continue
line = line[:72]
if line.startswith('-CONT-'):
old += line[18:]
else:
if old is not None: PuchData.append(old.split())
old = line[24:]
data.append(old.split())