I am using Python 2.7 with MAC OS X and wrote a program to replace a word in a file with another word. Any time that word shows up in that file I want it replaced with another word that the user specifies. It seems to be working but it seems to be outputting a couple extra lines on the bottom that are copied from the file. Does anyone know why it is doing this?
Original file:
JavaScript
x
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
After running my script, the user will input “test” as hostname:
JavaScript
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()
I get the modified file correctly but has the extra “smsched.log” as the last line which does not exist in the original file, I have repeated this process and it happens everytime:
JavaScript
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
Advertisement
Answer
Use the fileinput.input(filePath, inplace=True)
method instead of the open(..) method
Here’s the script:
JavaScript
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"
for line in fileinput.input(fileToSearch, inplace=True):
print line.replace(textToSearch, textToReplace),