我正在使用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'。 –