gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:17:23 25 4
gpt4 key购买 nike

我有一个 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) 的行都是一行数字数据。但事实并非如此:表格的标题行之一也只有四个字段。

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

关于python - 无法将字符串转换为数据 - python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20243375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com