2014-06-17 58 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 
相關問題