2014-06-17 62 views
0

我敢肯定,这很简单,我忽略了。我之前做过这种手术。我正在从我的模板文件htmlfile中读取数据,然后写入htmlfile2,这是我的实际报告。在任何人都不喜欢之前,HTML并没有被用在网站或任何东西上,它只是作为显示报告数据的便捷方式。我发现了rgraph,一个用于创建HTML5图形的工具,并且认为:“哇,这是完美的!我现在甚至不必编写GUI,我可以轻松地保存我的报告结果!”从一个文件读到另一个文件

我HTMLFILE有几行包含文本,它告诉我的计划提到htmlfile2更换线路的需求意见。如果我使用print语句来检查哪些循环正在执行,那么每次都会执行正确的循环。由于某些原因,文字从不改变。就好像写函数发生了一样,但是不起作用,它默默地失败了。模板中的值不在任何地方的python代码中,因此即使输入了循环,写入也不会完成它的工作。我已经尝试了一些不同的条件,只是为了看看是否会有任何改变,因此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) 

其中应该只更改上面的一行,重新将25与30

编辑2:

这是因为我认为,文字是由其他覆盖if语句运行时,它不应该是。我退出写的一个后(0)置于”,并检查了我的文件,并在它的信息是单独该值正确..

编辑3:在评论

解决方案对于谁曾经有一个人将来会出现类似的问题,请记住,调试,调试,调试!逐个进入你的进程,你会发现你的问题。就我而言,我调用了一个函数,却没有意识到它会覆盖我的输出文件的内容。输入文件

+0

写操作都没有做什么?或者只是其中的一部分? – Brionius

+0

似乎所有的,但最后写拒绝工作。这几乎就好像htmlfile2.write(line)覆盖了已更改的行,即使“if searchT not in line”应该阻止它执行此操作。 – TheFunk

+0

您应该提供一个最小的完整示例,包括文件的内容(一行或两行应该足够)和调用参数。 – pentadecagon

回答

0

为了解决我的问题,我不得不看两点:循环结构,过程我的主要功能,创建了一个具有功能editHTML的对象,在我的情况,当我打电话editHTML多次,si当我从一个静态文件(如果你愿意的话)读取并且搜索过于具体的标准时,我最终覆盖了行。自那以后,我改变了整个结构,使其更简单。现在,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 
相关问题