我有一个文件(带有extension.hgx),其中包含以下数据:
length = 0.00000783
height = 48
RATIO = 2
X = 1.0
Y = 1.0
我想打开文件并替换两行:
height = 48
RATIO = 2
使用:
height = 8
RATIO = 8
我尝试解析文件,可以搜索“height”和“RATIO”。不幸的是,我无法用新行替换该行并重新保存该文件。在我的情况下,问题是,在文件中,参数的值,例如高度(= 48)变化,有时间隙不均匀。我想用 - 替换这整行 身高= 8
我写了以下代码
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
这无助于替换完整行并再次保存文件。返回空文件。非常感谢任何帮助。
此致 RIS
答案 0 :(得分:2)
这是怎么回事?
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')
答案 1 :(得分:1)
在找到“高度”行后,你需要在第一个循环中停止迭代:
if line.find(search_phrase) >= 0:
print line_num
break
答案 2 :(得分:0)
我建议使用正则表达式工具:
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()
你输入 new 你要在文件中发生的行,无论顺序是什么(这就是为什么我在我的例子中'height'行之前写'RATIO'行,以显示)
该程序设法获取用于创建正则表达式的词典 dic ,该词典允许搜索要替换的行并用 dic 作为与行的第一个名称相对应的值
行'sdjlkhbfvjhdbfjhsdoijhfsdhfksdhfh'并不重要。我把它放在新的地方,表明正则表达式 regx 仅匹配格式为'name = something'的行
此代码应该按原样运行。您只需将文件名称指定为 filename ;如果有任何错误,请给它。