Я использую Python 2.7 с MAC OS X и написал программу для замены слова в файле другим словом. В любое время, когда это слово появляется в этом файле, я хочу, чтобы оно было заменено другим словом, которое пользователь указывает. Кажется, что он работает, но, похоже, выводит пару дополнительных строк внизу, которые копируются из файла. Кто-нибудь знает, почему он это делает?Python Использование Fileinput для замены слов
Исходный файл:
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' для чего-либо в частности. –