无法将字符串转换为数据-python

无法将字符串转换为数据-python,python,linux,Python,Linux,我有一个python脚本,它将文件从.dat转换为.csv。然而,我对这个脚本有错误 我的代码: import os import sys import math _NAME = os.path.split(sys.argv[0])[1] #who am i? _TOR = 1e-10 if len(sys.argv)>2: datFile=sys.argv[1] outFile=sys.argv[2] else: print("usage > py

我有一个python脚本,它将文件从.dat转换为.csv。然而,我对这个脚本有错误

我的代码:

import os
import sys
import math

_NAME = os.path.split(sys.argv[0])[1]   #who am i?
_TOR = 1e-10

if len(sys.argv)>2:
    datFile=sys.argv[1]
    outFile=sys.argv[2]

else:
    print("usage > python  %s  infile   outfile    " % _NAME)
    print("   ex > python  %s  ndisp.dat ndisp.csv " % _NAME)
    sys.exit() 

lineCount=0

def ReadInp(fi):
    global lineCount
    s=fi.readline()
    if (s!=""):
        lineCount=lineCount+1
    return s

"""
 displacements (vx,vy,vz) for set NDISPI1 and time  0.1562500E-01

   255 -4.3462E-05  1.4730E-04  0.0000E+00
  1431 -4.1070E-05  0.0000E+00  0.0000E+00

 displacements (vx,vy,vz) for set NDISPO1 and time  0.1562500E-01

      2733  1.0723E-04 -4.4200E-05  0.0000E+00
  2880  1.0488E-04  0.0000E+00  0.0000E+00
"""

fi = open(datFile,'r')
fo = open(outFile,'w')

sFind1="DISPLACEMENTS (VX,VY,VZ) FOR SET"
sFind2="AND TIME"
nFind1=len(sFind1)
nFind2=len(sFind2)

s1=""
sName=""
sTimeOld=""
sTime=""
ss=""
flgHeader=False
while True:
    s=ReadInp(fi)
    if (s==""):
        break
s1=s.strip() #chomp
s2=s1.split()
n2=len(s2)
iName1=s1.upper().find(sFind1)
if (iName1 != -1 ):
    iName2=s1.upper().find(sFind2)
    sName=s1[iName1+nFind1:iName2].strip()
    sTime=s1[iName2+nFind2:].strip()
    if( (sTime != sTimeOld)):
        if( sTimeOld != "" ):
            if (flgHeader==False):
                flgHeader=True
                ns=int(len(ss.split(",")))/7
                sHeader="Name,Time,Node,ux,uy,uz,uAll,"*ns
                fo.write(sHeader)
                fo.write("\n")
            fo.write(ss)
            fo.write("\n")
            ss=""
            print(sTime)
        sTimeOld=sTime
elif ( n2 == 4 ):
    Node=int(s2[0])
    ux=float(s2[1])
    uy=float(s2[2])
    uz=float(s2[3])
    uAll=math.sqrt(ux*ux+uy*uy+uz*uz)

    ss=ss+"%s,%s,%d,%g,%g,%g,%g," % (sName , sTime , Node,ux,uy,uz,uAll )

if(ss != "" ):
    fo.write(ss)
    fo.write("\n")


fi.close()
fo.close()
我运行这段代码的错误是什么

我的错误是:

Traceback (most recent call last):
  File "do2csv.py", line 105, in <module>
    ux=float(s2[1])
ValueError: could not convert string to float: NO

如果我读的是正确的,那么您的代码假设任何包含四个字段的行(
n2==4
)都将是一行数字数据。但事实并非如此:表的一个标题行也只有四个字段


您可以跳过任何以字母开头的行,或其中任何位置包含非数字字段的行,或只跳过文件的前三行来避免此问题。

请告诉我们代码有什么问题。你给它什么输入,你得到什么输出,你期望什么?您发现了哪些错误(如果有)?如果没有这些信息,我们是盲目的,不太可能提供帮助。我还对代码中的一些注释和打印进行了删减,使其更加紧凑。请删除我们复制问题不需要的任何内容。我添加了我的错误,您将其删除。很抱歉,这是一个简单的编辑冲突。我在中添加了它。我添加了我的输入文件。我想把这个.dat文件转换成.csv文件。
    E I G E N V A L U E   O U T P U T
 MODE NO  EIGENVALUE             FREQUENCY
                     (RAD/TIME)      (CYCLES/TIME)
1   0.8040979E+04   0.8967150E+02   0.1427166E+02

2   0.8040979E+04   0.8967151E+02   0.1427166E+02

3   0.3158085E+06   0.5619685E+03   0.8944006E+02      

4   0.3158085E+06   0.5619685E+03   0.8944006E+02

5   0.2476525E+07   0.1573698E+04   0.2504618E+03

6   0.2476525E+07   0.1573698E+04   0.2504618E+03

7   0.9513950E+07   0.3084469E+04   0.4909085E+03

8   0.9513950E+07   0.3084469E+04   0.4909085E+03

9   0.2601478E+08   0.5100468E+04   0.8117648E+03

10   0.2601478E+08   0.5100468E+04   0.8117648E+03