从一个文件读入另一个文件

2024-04-26 17:39:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我肯定我忽略了一些简单的事情。我以前做过这种手术。我正在读取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:

注释中的解决方案。对于任何人谁曾经有过类似的问题,在未来,永远记住,调试,调试,调试!一步一步地进入你的流程,你会发现你的问题。在我的例子中,我调用了一个函数,却没有意识到它会用输入文件的内容覆盖我的输出文件。你知道吗


Tags: 文件文本newifwritemeterelifstr
1条回答
网友
1楼 · 发布于 2024-04-26 17:39:36

为了解决我的问题,我必须看两件事:循环结构和过程。我的main函数创建了一个具有editHTML函数的对象,在我多次调用editHTML的情况下,由于我是从静态文件(模板,如果你愿意)中读取并搜索太特定的条件,我最终覆盖了行。后来我改变了整个结构,使之更简单。现在,editHTML只被调用了一次,而不必关注我需要调用这个函数多少次,以及这会对我的文本产生什么影响,这个函数被调用一次,在一次运行中完成我需要它做的所有工作,如果用户选择再次运行它,它会自动重置。你知道吗

现在它只需要优化。这是新的editHTML代码,它现在被传递一个列表(而不是两个字符串)作为它的唯一参数。你知道吗

   def editHTML(self, 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:
                fixer = '//REP'
                count = 0
                for line in htmlfile:
                    if line.find(fixer) == -1:
                        htmlfile2.write(line)
                    else:
                        if count == 0:
                            print("running 1")
                            htmlfile2.write("\t\t\tvar meter = new RGraph.Meter('cvs', 0,100, " + str(replaceT[0]) + ") //REP1\n")
                        elif count == 1:
                            print("running 2")
                            htmlfile2.write("\t\t\tvar meter = new RGraph.Meter('cvs2', 0,100, " + str(replaceT[1]) + ") //REP2\n")
                        elif count == 2:
                            print("running 3")
                            htmlfile2.write("\t\t\tvar meter = new RGraph.Meter('cvs3', 0,1000, " + str(replaceT[2]) + ") //REP3\n")
                        elif count == 3:
                            print("running 4")
                            htmlfile2.write("\t\t\tvar meter = new RGraph.Meter('cvs4', 0,30, " + str(replaceT[3]) + ") //REP4\n")
                        elif count == 4:
                            print("running 5")
                            htmlfile2.write("\t\t\tvar meter = new RGraph.Meter('cvs5', 0,30, " + str(replaceT[4]) + ") //REP5\n")
                        count += 1

相关问题 更多 >