import fileinput
import fnmatch
import os, re
import datetime, time
def getCurrentTime():
# now = datetime.datetime.now()
return time.strftime('%Y-%m-%d %A %H:%M:%S', time.localtime())
def walkDir(directory, ext='*.*', topdown=True):
fileList = []
for root, dirs, files in os.walk(directory, topdown):
for name in files:
if fnmatch.fnmatch(name, ext):
fileList.append(os.path.abspath(os.path.join(root, name)))
return fileList
def replaceInFile(filename, oldValue, newValue):
for line in fileinput.input(filename, True):
if re.search(oldValue, line):
line = line.replace(oldValue, newValue)
print(line)
def replaceInLine(line, oldValue, newValue):
if re.search(oldValue, line):
line = line.replace(oldValue, newValue)
print('\t'+line.strip())
def updateFile(filename):
for line in fileinput.input(filename, True):
if len(line.strip()) == 0:
continue
if fileinput.isfirstline():
print(line.strip())
if line.split()[1] == 'build_number':
replaceInLine(line, line.split()[-1], "'build002000'")
elif line.split()[1] == 'install_time':
replaceInLine(line, line.split("'")[1], getCurrentTime())
else:
print('\t'+line.strip())
def restartService(filename):
for line in fileinput.input(filename):
if len(line.strip()) == 0:
continue
if line.split()[-1] == "'mad'":
os.system('echo service mad restart...')
break
if __name__ == '__main__':
for filename in walkDir('.', '*.txt'):
updateFile(filename)
restartService(filename)
fileinput中的inplace=True表示把输出重定向到文件。这样所有print输出都是指向文件的。
测试用的文件内容:
config IPv6 system
option role 'mad'
option version 'v2.6.1'
option os 'Cent os'
option build_number 'build001000'
option build_time '20160901'
option install_time '2016-09-01 Monday 00:00:00'