我在使用python中字典中的值替换TEX文件中的某些标记时遇到问题。
我在python中有这个字典:
json_obj = {
'$ORGANIZATA_SHENDETSORE$': "hejj",
'$NJESIA_ORGANIZATIVE$': "hejj",
'$VENDI$': "hejj",
'$NUMRI_AMZE$': "hejj",
'$MJEKU_NR_LICENSES$': "hejj",
'$EMRI$': "hejj",
'$MBIEMRI$': "hejj",
'$GJINIA$': "hejj",
}
这些dict键我在一个名为mdr-form.tex的tex文件中作为标记,因此我按照以下方式执行此循环,但它在输出TEX文件patient-form.tex中只显示一个替换标记, 这是循环:
with open('data/mdr-form.tex', 'r') as infile, open('data/patient-form.tex', 'w') as outfile:
for line in infile:
for key in json_obj:
new_line = line.replace(key, json_obj[key])
print line
outfile.write(new_line)
你能用更好的循环或更好的方法帮助我替换输入文件中的所有标记吗? 提前谢谢!
答案 0 :(得分:0)
如果匹配的键没有尾随$
以及前导的那些,则可以使用内置的Python string Template功能。
既然如此,你可以用正则表达式解决问题:
>>> import re
>>> p = re.compile("(\$.+?\$)")
>>> json_obj = {
... '$ORGANIZATA_SHENDETSORE$': "hejj",
... '$NJESIA_ORGANIZATIVE$': "hejj",
... '$VENDI$': "hejj",
... '$NUMRI_AMZE$': "hejj",
... '$MJEKU_NR_LICENSES$': "hejj",
... '$EMRI$': "hejj",
... '$MBIEMRI$': "hejj",
... '$GJINIA$': "hejj",
... }
>>> def replaceFn(matchObj):
... # return the value matching this key, or '???' if the key isn't found.
... return json_obj.get(matchObj.group(0), "???")
...
>>> p.sub(replaceFn, "this is $VENDI$ and $EMRI$ and an $ERROR$")
'this is hejj and hejj and an ???'
>>>
请注意,您不需要逐行处理文件 - 只需将其全部读入字符串,一次性完成替换,然后将结果字符串写回输出文件。
答案 1 :(得分:0)
您需要将new_line
替换为line
,因为在每次迭代中,当您重新初始化new_line
并将key
替换为value
时,您将丢失之前的替换}。但是,如果您将new_line
替换为line
,则所有替换都会存储在line
中,并且您将此line
写入outfile
。
for line in infile:
for key in json_obj:
line = line.replace(key, json_obj[key])
print line
outfile.write(line)