2013-08-22 119 views
2

因此,我在我的代碼中生成了一個列表,現在我想根據現有文檔對其進行檢查,以查看在創建新文檔之前存在哪些差異。將列表與文本文檔進行比較

這裏是我的嘗試:

diff = "" 
    if File2_Loc : 
     File2 = open(File2_Loc , 'r') 
     for line in R_List : 
      if line in File2 : 
       pass 
      else : 
       diff += (line.strip() + " not found in old file.\n") 
     for line in File2 : 
      if line == "***** Differences founds : *****\n" : 
       print("Compared!") 
       break 
      if line in R_List : 
       pass 
      else : 
       diff += (line.strip() + " not found in new file.\n") 
    else : 
     print("No file inputted:") 
    for line in R_List : 
     File1.write(line) 
    File1.write("***** Differences founds : *****\n") 
    if diff : 
     File1.write(diff) 
    else : 
     File1.write("None.\n") 

這裏的問題是,內R_List每一行file2中是找不到的,即使他們的100%應該是。

我已經找了一個解決方案,但我沒有看到任何解決我的問題或解決我的問題。

回答

2

這是因爲該文件只能讀取一次。如果您調用「in」,則不會再次迭代(從當前位置「讀取」,即文件末尾)。因此,解決辦法是使用閱讀File2.readlines()中的所有文件到內存中,「在」試穿那件事:-)

File2 = open(File2_Loc , 'r') 
    lines2 = File2.readlines() # Define the lines here 
    File2.close()    # This is also a good idea 
    for line in R_List : 
     if line in lines2 :  # Iterate over lines instead of file 
      pass 
     else : 
      diff += (line.strip() + " not found in old file.\n") 
    for line in lines2 :  # Iterate over lines instead of file 
     if line == "***** Differences founds : *****\n" : 
      print("Compared!") 
      break 
     if line in R_List : 
      pass 
     else : 
      diff += (line.strip() + " not found in new file.\n") 

解決方案2: 該解決方案採用集和運算符「 - 」對它們進行析取:

File2 = open(File2_Loc , 'r') 
    lines2 = File2.readlines() # Define the lines here 
    File2.close()    # This is also a good idea 
    not_in_file2 = list(set(R_list) - set(lines2)) 
    not_in_rlist = list(set(lines2) - set(R_list)) 
    # Finish the diff output accordingly. 
+0

第二個ond似乎更好,但是,任何舊文件的結尾。我正在考慮迭代list2以查找發生的位置並將其切斷。 – CamelopardalisRex

+0

無論你喜歡什麼:-)我只做了第二個解決方案的草圖,因爲問題圍繞着文件進行迭代,而不是圍繞你以後做什麼。我希望迭代對你有用。 –

相關問題