I have a file (with extension.hgx) that has some data like this:
length = 0.00000783
height = 48
RATIO = 2
X = 1.0
Y = 1.0
I would like to open the file and replace the two lines:
height = 48
RATIO = 2
With:
height = 8
RATIO = 8
I tried parsing the file and could search for the "height" and "RATIO". Unfortunately, I could not replace the line with new line and re-save the file. In my case the problem is that, that in the file the value of parameters eg height(=48) varies and sometimes has uneven spaces in between. I want to replace this complete line with-- height = 8
I have written the following code
import fileinput
import sys
f = open('test.hgx','r')
line_num = 0
search_phrase = "height"
for line in f.readlines():
line_num += 1
if line.find(search_phrase) >= 0:
print line_num
newline='height = 8'
lnum=1
for line in fileinput.FileInput("test.hgx",inplace=1):
if lnum==line_num:
result = newline+"\n"
else:
result=line
lnum=lnum+1
sys.stdout.write(result)
print line
This does not help replace complete line and save the file again. returns empty file.Any help would be greatly appreciated.
Regards, Ris
How's this?
with open('test.hgx') as f: lines = f.read().splitlines()
with open('test.hgx', 'w') as f:
for line in lines:
if line.startswith('height') or line.startswith('RATIO'):
f.write(line.rsplit(' ', 1)[0] + ' 8\n')
else:
f.write(line + '\n')
you need to stop iterating in the first loop after finding the "height" line:
if line.find(search_phrase) >= 0:
print line_num
break
I propose to use regex tool:
import re
regx = re.compile('^(([^ \t]+)[ \t]+=.+)',re.MULTILINE)
new = '''\
RATIO = 8
sdjlkhbfvjhdbfjhsdoijhfsdhfksdhfh
height = 8
'''
dic = dict(mat.group(2,1) for mat in regx.finditer(new))
regchange = re.compile('^('+'|'.join(dic.iterkeys())+')[ \t]+=[^\r\n]+',re.MULTILINE)
with open(filename,'r+') as f:
content = f.read()
f.seek(0,0)
f.write(regchange.sub(lambda m: dic[m.group(1)],content))
f.truncate()
You put in new the lines you want to take place in the file, no matter in which order (that's why I wrote 'RATIO' line before 'height' line in my exemple, to show)
The program manages to obtain the dictionary dic that is used to create the regex that allows to search for the lines to be replaced and to substitute them with lines recorded in dic as values corresponding to the first name of the line
The line 'sdjlkhbfvjhdbfjhsdoijhfsdhfksdhfh' has no importance. I put it in new to show that the regex regx matches only with lines of the format 'name = something'
This code should work as-is. You have just to give a file's name to filename ; If any error, give it please.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.