У меня есть скрипт python и файл с .dat на .csv. Однако, я ошибаюсь в этом сценарии.не удалось преобразовать строку в данные - python
Мой код:
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
Похоже, ваш пост является в основном код; добавьте еще несколько деталей.
Пожалуйста, сообщите нам * что не так * с кодом. Какой вклад вы дадите, какой результат вы получаете, чего вы ожидали? Какие ошибки, если таковые имеются, вы видели? Без этой информации мы плаваем вслепую и вряд ли помогаем. –
Я также подрезал некоторые комментарии и отпечатки в коде, чтобы сделать его немного более компактным. Удалите все, что не требуется для того, чтобы воспроизвести проблему. –
Я добавил свою ошибку и удаляю ее. – user3026022