这是一个脚本,用于预处理服务器上的CFD输入文件以提交作业。我目前有一个Python代码可以执行此操作,但是我需要更改的一个文件给我带来了问题。
该文件是用空格分隔的两列数据文件:
HEADER X
标题Y
-400.0 1
-320.0 0.1
-280.0 0.01
0.0 0.001
等等等等文件的其余部分
我只想查找并将字符串“ 0.0”更改为新的东西,例如“ 2.0”,“-1.0”或“ 3.0”或其他。我现在所拥有的代码已经知道“ 0.0”是感兴趣的字符串,并在文件中搜索该字符串并将其替换为另一个数字。这已在其他CFD输入文件中成功完成。
但是,在此特定文件中,由于没有可用于跳转关键字的字母字符串,因此我必须搜索出现的“ 0.0”。问题是我的代码当前用“ 1.0”代替了第一次出现的“ 0.0”。因此代码变为:
HEADER X
标题Y
-400.0 1
1.0 0.1
-280.0 0.01
0.0 0.001
等等等等文件的其余部分
我当前使用的代码是:
with open('file.in','r') as file:
for line in file:
if '-400.0' in line: # jump to first instance of "-400.0"
for line in file:
if str(spk) in line: # in this case, spk = 0.0
orispkline = line #save the line with "0.0"
newspkline = line.replace(str(line.split([0]),str(newspk)) # replace "0.0" with "1.0"
break # jump out of the loop as the job is done
file.seek(0) # go back to start of file:
filedata = file.read() # read the file again
filedata = filedata.replace(str(orispkline),str(newspkline)) # replace the old line with the updated line
with open('file.in','w') as file:
file.write(filedata) # write the file
所以发生的事情是,它在“ -320.0”中看到了“ 0.0”,而只是替换了它。我想要的是代码逐行通过,找到自身出现的“ 0.0”并在行的开头,然后将其替换为所需的数字。
我知道代码确实是可以解决的,但是可以与所有其他文件一起使用,并且我想使事情保持简单和一致。
注意:要搜索的字符串并不总是“ 0.0”,但曲柄角“ 0.0”总是给我带来最大麻烦的字符串。
谢谢大家的帮助!
答案 0 :(得分:0)
好,感谢furas在上述评论中的建议。我改变了这一行:
if str(spk) in line:
到
if line.startswith(spk):
其中“ spk”是转换为字符串的点火正时。这适用于我测试过的所有情况,并成功确定了正确的行以进行替换。
谢谢大家的讨论,尤其是Furas。