如何在Python中的文件行中找到确切的字符串?

时间:2019-04-15 14:50:17

标签: python string search io

这是一个脚本,用于预处理服务器上的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”总是给我带来最大麻烦的字符串。

谢谢大家的帮助!

1 个答案:

答案 0 :(得分:0)

好,感谢furas在上述评论中的建议。我改变了这一行:

if str(spk) in line:

if line.startswith(spk):

其中“ spk”是转换为字符串的点火正时。这适用于我测试过的所有情况,并成功确定了正确的行以进行替换。

谢谢大家的讨论,尤其是Furas。