簡體   English   中英

無法將字符串轉換為數據-python

[英]could not convert string to data - python

我有一個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

我在.dat文件中的輸入:

    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

如果我正確地閱讀了此內容,則您的代碼假定具有四個字段( n2 == 4 )的任何行都是數字數據行。 但這不是真的:表的標題行之一也只有四個字段。

您可以跳過任何以字母開頭的行,或者其中包含非數字字段的任何行,或者僅跳過文件的前三行,就可以避免此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM