2016-11-02 59 views
0

我組成了一個快速文件比較工具,它將檢查兩個文件之間的差異。我突然意識到我可能會需要差異發生在的行號。任何人都有關於如何將其納入以下代碼的提示?關於如何從python文本文件中獲取行號的任何提示?

def fileCompare(): 
    systemList=os.listdir("S:\\Automation_Results") 
    for system in systemList: 
     resFilesList=os.listdir("S:\\Automation_Results\\"+system) 
     for resFile in resFilesList: 
      if os.path.isfile("S:\\KnownGoodOutput\\"+resFile)==True: 
       with open("S:\\KnownGoodOutput\\"+str(resFile)) as kFile: 
        kSet=set(kFile) 
        with open("S:\\Automation_Results\\"+str(system)+"\\"+str(resFile)) as tFile, open("S:\\FC_Result_Files\\Compare_Results for"+str(system)+".txt","w") as fcFile: 
         fcFile.writelines(line for line in tFile if line not in kSet) 

我想我可能會以遞增的行讀計數器,但是相信我需要重做我的比較方法,儘管我希望我是錯了,因爲我比較喜歡這種方法。 ..運行真的很好。

我不明白我的問題是如何與所鏈接的內容重複的。在兩個比較文件之間發生不匹配時,我在這裏獲取文件中的行號。在鏈接中,他們只是獲取文件中的總行數。是的,一些答案使用枚舉,但不是以這種方式。如果我只想數行......呃......我不會問的。 This link與我正在做的事情有更多共同之處,但是由於它在不同的主題上搜索它是不太可能的,它仍然是一個完全不同的用例。

+0

,我不認爲這是一種欺騙 – Ranveer

回答

0

我覺得這樣的事情應該工作:

fcFile.writelines('{}: {}'.format(line_number, line) 
        for line_number, line in enumerate(tFile) 
        if line not in kSet) 
+0

啊......我完全忘了枚舉......雖然我的防守文件操作是不是有什麼我通常使用Python for。雖然對於任何未來的觀衆,你會想設置枚舉的開始...在我的情況下,我只需要改變...枚舉(tFile,開始= 1),否則我的行號將是一個。感謝百萬 –

+0

此外還有其他的東西出現。我需要捕獲line_number的值。我想用它在其他地方有一個變量。我正在嘗試使用它來打印結果文件正在進行比較的文件行。我把文件放在一個列表中,然後我嘗試:fcFile.writelines('{}:{}'。format(line_number,line,kLines [line_number])...它給了我一個索引超出範圍,因爲line_number顯然沒有任何價值,即使它在輸出文件中打印完美。 –

+0

@VagrantStorm提出一個新問題幷包含您當前的代碼。 – smarx

相關問題