我肯定我忽略了一些简单的事情。我以前做过这种手术。我正在读取htmlfile,这是我的模板文件,并写入htmlfile2,这是我的实际报告。在任何人发疯之前,HTML并没有被用于网站或任何东西,它只是被用作显示报表数据的方便手段。我找到了rgraph,一个创建HTML5图形的工具,然后想,“哇,这太完美了!我现在甚至不需要编写GUI,我可以轻松保存我的报告结果!”你知道吗
我的htmlfile有几行带有注释的行,这些注释包含文本,这些文本告诉我的程序该行需要在htmlfile2中替换。如果我使用print语句来检查哪些循环正在执行,那么每次都会执行正确的循环。因为某些原因,文本永远不会改变。就好像写函数发生了,但不起作用,它默默地失败了。模板中的值不在python代码中的任何地方,因此即使已经输入了循环,写操作也不会完成它的工作。我尝试了一些不同的if条件,只是想看看是否会有任何变化,因此startswith与==,等等。帮助???你知道吗
def editHTML(self, searchT, replaceT):
if os.path.isfile('C:/MetReports/report.html'):
with open('C:/MetReports/report.html') as htmlfile:
with open('C:/MetReports/report2.html', 'w') as htmlfile2:
for line in htmlfile:
if searchT in line:
if searchT.startswith('REP1'):
tester = "\t\t\tvar meter = new RGraph.Meter('cvs', 0,100, " + str(replaceT) + ") //REP1\n"
htmlfile2.write(tester)
elif searchT == 'REP2':
tester2 = "\t\t\tvar meter = new RGraph.Meter('cvs2', 0,100, " + str(replaceT) + ") //REP2\n"
htmlfile2.write(tester2)
elif searchT == 'REP3':
htmlfile2.write("\t\t\tvar meter = new RGraph.Meter('cvs3', 0,1000, " + str(replaceT) + ") //REP3\n")
elif searchT == 'REP4':
htmlfile2.write("\t\t\tvar meter = new RGraph.Meter('cvs4', 0,30, " + str(replaceT) + ") //REP4\n")
elif searchT == 'REP5':
htmlfile2.write("\t\t\tvar meter = new RGraph.Meter('cvs5', 0,30, " + str(replaceT) + ") //REP5\n")
elif searchT not in line:
htmlfile2.write(line)
编辑澄清:
htmlfile中的示例行:
<canvas id="cvs" width="400" height="250" style="border: 1px solid #ccc; border-radius: 15px">[No canvas support]</canvas>
<script>
$(document).ready(function ()
{
var meter = new RGraph.Meter('cvs', 0,100, 25) //REP1
.set('angles.start', RGraph.PI - 0.5)
.set('angles.end', RGraph.TWOPI + 0.5)
25是在输入循环和searchT变量时应该更改的数字。因此,运行示例如下所示:
editHTML('REP1', 30)
它应该只改变上面的一行,用30替换25。你知道吗
编辑2:
正如我所想,文本正在被另一个if语句覆盖,而这个if语句不应该被覆盖。我在一次写入之后放置了“exit(0)”,并检查了我的文件,其中的信息仅适用于该值。。你知道吗
编辑3:
注释中的解决方案。对于任何人谁曾经有过类似的问题,在未来,永远记住,调试,调试,调试!一步一步地进入你的流程,你会发现你的问题。在我的例子中,我调用了一个函数,却没有意识到它会用输入文件的内容覆盖我的输出文件。你知道吗
为了解决我的问题,我必须看两件事:循环结构和过程。我的main函数创建了一个具有editHTML函数的对象,在我多次调用editHTML的情况下,由于我是从静态文件(模板,如果你愿意)中读取并搜索太特定的条件,我最终覆盖了行。后来我改变了整个结构,使之更简单。现在,editHTML只被调用了一次,而不必关注我需要调用这个函数多少次,以及这会对我的文本产生什么影响,这个函数被调用一次,在一次运行中完成我需要它做的所有工作,如果用户选择再次运行它,它会自动重置。你知道吗
现在它只需要优化。这是新的editHTML代码,它现在被传递一个列表(而不是两个字符串)作为它的唯一参数。你知道吗
相关问题 更多 >
编程相关推荐