Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否使用python替换文本文件中的特定行?_Python - Fatal编程技术网

是否使用python替换文本文件中的特定行?

是否使用python替换文本文件中的特定行?,python,Python,如何使用python替换文件中的特定文本行。看看是否有一个名为“File1.tcl”的文件。并为单词“::AgtQtl::CloseAllOutputFiles”查找特定的。如果找到,请替换为以下文本。有人能帮我解决这个问题吗 File1.tcl: AgtQtl::SetupOutputFiles if { [AddAllPorts] } { set result [PreparePorts] InitPortInfo #

如何使用python替换文件中的特定文本行。看看是否有一个名为“File1.tcl”的文件。并为单词“::AgtQtl::CloseAllOutputFiles”查找特定的。如果找到,请替换为以下文本。有人能帮我解决这个问题吗

File1.tcl:

AgtQtl::SetupOutputFiles
    if { [AddAllPorts] } {
        set result [PreparePorts]
        InitPortInfo
        #
        # start the test
        #
        if { [AgtQtl::GetScriptMode] != "COMMANDLINE" } {
            ::TestGui::ShowResult None black gray -noraise
        }
        GenerateReportSection HEADER
        if { $result } {
            if [AddSubinterfaces] {
                RunTestLoop
            } else {
                set message [list "Add sub-interfaces" "FAIL"]
                GenerateReportSection BODYRECORD $message
                lappend statLog $message
            }
        } else {
            set message [list "Prepare ports" "FAIL"]
            GenerateReportSection BODYRECORD $message
            lappend statLog $message
        }
        set appData(testStopTime) [clock seconds]
        set testPassFailMsg [DeterminePassFail]
        if { $testPassFailMsg == "" } {
            set testPassFailMsg "PASSED"
        }
        set appData(testPassFailMsg) $testPassFailMsg
        GenerateReportSection FOOTER
        ::TestApp::StopTest
    }
}
AgtTsuTestState TEST_STOPPED
if { [AgtQtl::GetScriptMode] != "COMMANDLINE" } {
    switch $testPassFailMsg {
    PASSED {
        set testPassFailMsg "PASS"
        set fgColour black
        set bgColour green
       }
    default  {
        set testPassFailMsg "FAIL"
        set fgColour black
        set bgColour red
       }
    }
    ::TestGui::ShowResult $testPassFailMsg $fgColour $bgColour
}

::AgtQtl::CloseAllOutputFiles

return $result
}

在此代码中。。。查找这行文本“::AgtQtl::CloseAllOutputFiles”

如果找到。。替换为这行代码

set filelid [open "C:/Sanity_Automation/Work_Project/Output/smokeTestResult" w+]
puts $filelid
close $filelid

最简单的方法是在扫描时将内容写入不同的文件。代码如下:

replace_with = """
set filelid [open "C:/Sanity_Automation/Work_Project/Output/smokeTestResult" w+]
puts $filelid
close $filelid
"""
search = "AgtQtl::CloseAllOutputFiles"

fd1 = open('so.tcl')
fd2 = open('so1.tcl', 'w')

for line in fd1.readlines():
    if line.find(search) > -1:
        fd2.write(replace_with)
    else:
        fd2.write(line)

fd1.close()
fd2.close() 
希望能有帮助。也许还有其他更好的方法。如果文件太大,则此代码无效