我正在使用Python 2.7和MAC OS X,并编写了一个程序用另一个单词替换文件中的单词。任何时候该单词出现在该文件中,我都希望用用户指定的另一个单词替换它。它似乎正在工作,但它似乎是从文件复制底部输出一些额外的行。有谁知道它为什么这样做?使用FileInput替换单词的Python
原始文件:
TCPServeraddress april.com
NODename hostname
COMMmethod TCPip
NFSTIMEout 0
TCPBuffsize 32
TXNB 25600
TCPWINDOWSIZE 64
TCPNODELAY YES
LARGECOMMBUFFERS YES
MANAGEDServices Schedule
SCHEDMODe prompted
PASSWORDAccess generate
ERRORLOGRetention 2 d
ERRORLOGName /ngs/hostname/logs/dsmerror.log
SCHEDLOGRetention 2 d
SCHEDLOGName /ngs/hostname/logs/dsmsched.log
运行我的脚本后,用户将输入“测试”作为主机名:
import fileinput
textToSearch = "hostname"
print ("Please type in the TSM Hostname:")
textToReplace = raw_input("Hostname/Nodename: ")
print ("***Updating dsm.sys file****")
fileToSearch = "/Users/bob/Desktop/FinalizedPythonScripts/helloworld"
tempFile = open(fileToSearch, 'r+')
for line in fileinput.input(fileToSearch):
tempFile.write(line.replace(textToSearch, textToReplace))
tempFile.close()
我正确地获得修改后的文件,但有额外的“smsched.log “作为原始文件中不存在的最后一行,我重复了这个过程,并且每次都发生:
TCPServeraddress april.com
NODename test
COMMmethod TCPip
NFSTIMEout 0
TCPBuffsize 32
TXNB 25600
TCPWINDOWSIZE 64
TCPNODELAY YES
LARGECOMMBUFFERS YES
MANAGEDServices Schedule
SCHEDMODe prompted
PASSWORDAccess generate
ERRORLOGRetention 2 d
ERRORLOGName /ngs/test/logs/dsmerror.log
SCHEDLOGRetention 2 d
SCHEDLOGName /ngs/test/logs/dsmsched.log
smsched.log
可能是由于使用'fileinput.input'迭代它而修改文件引起的。也许最好把文件加载到内存中,修改它,然后将输出写回去。特别是如果你没有特别使用'fileinput'。 –