2013-08-29 60 views
2

我想比較兩個txt文件與所有行,但是當我運行代碼時它只響應了幾個結果,循環沒有效果運行,似乎在File1中錯過了很多行,只出現了File1的第一行。比較兩個文件並寫入新文件,但只輸出幾行?

問題:

我的循環有因後非常感謝

def compareLines(filename1,filename2): 

    File1=open(filename1,'r') 
    File2=open(filename2,'r') 
    File3=open("Result.txt",'w') 

    finalList=[] 
    for line1 in File1: 
     for line2 in File2: 
      set1=set(line1.split(" ")) 
      set2=set(line2.split(" ")) 
      print line1 
      print line2 
      similarNumber=len(set1.intersection(set2))/float(len(set1.union(set2))) 
      File3.write('Simmilar rate:'+str(similarNumber)+' '+str(len(set1.intersection(set2)))+" words in incoindence\n") 
      finalList.append(similarNumber) 

    File1.close() 
    File2.close() 
    File3.close() 

    os.remove(filename1) 
    os.remove(filename2) 

    return finalList 
+1

你文件1的第一行比較文件2的每一行此時file2的是exhauste所以沒有其他事情發生。你想要做什麼?> –

+0

它仍然是低效率的,但是你可以重置'File2'的指針來啓動,所以你可以通過執行'File2.seek(0) '在file2中的line2之前:...' –

+0

如果文件不是很大,你可以加載它們兩次,然後遍歷行列表進行比較。 –

回答

2
在內環

你應該重新打開File2或使用file.seek跳轉至文件的開頭的任何問題嗎?!第一次迭代文件指針位於File2的末尾。

幫助上file.seek

>>> print file.seek.__doc__ 
seek(offset[, whence]) -> None. Move to new file position. 

Argument offset is a byte count. Optional argument whence defaults to 
0 (offset from start of file, offset should be >= 0); other values are 1 
(move relative to current position, positive or negative), and 2 (move 
relative to end of file, usually negative,.... 
+0

非常感謝!我解決了這個問題! – BruceZhong

0

多虧了答案above.And我特別感謝Nisan.H和阿什維尼·喬杜裏,我已經解決了你的幫助的問題,以前只添加一條線「在文件2" ~~~

高清compareLines(文件名,文件名2)線路2:

File1=open(filename1,'r') 
File2=open(filename2,'r') 
File3=open("Result.txt",'w') 

finalList=[] 

for line1 in File1: 
    File2.seek(0) 
    for line2 in File2: 
     set1=set(line1.split(" ")) 
     set2=set(line2.split(" ")) 
     print line1 
     print line2 
     similarNumber=len(set1.intersection(set2))/float(len(set1.union(set2))) 
     File3.write('Simmilar rate:'+str(similarNumber)+' '+str(len(set1.intersection(set2)))+" words in incoindence\n") 
     finalList.append(similarNumber) 

File1.close() 
File2.close() 
File3.close() 

os.remove(filename1) 
os.remove(filename2) 

return finalList 
相關問題