python从文件中获取差异

时间:2011-06-17 05:16:31

标签: python

如何比较两个文件的内容,说明file1中的内容是否以其他格式存在于file2中我们如何检测它

例如:文件1

        import datetime,os
        #include<stdio.h>
        import java.io.*;
        import mymodule,urllib,
        #include<conio.h>

File2:

        #include<stdio.h>
        import java.io.*;
        import mymodule,logging,random,traceback,urllib,os
        #include<conio.h>

       f = open('workfile','r+')
       f.read()  

       f1 = open('workfile1','r+')
       f1.read()  

       if(contents of file present in file2):
       {
              print found
       }
       else:
        {
              print not found
        }    

2 个答案:

答案 0 :(得分:4)

您可以查看difflib - http://docs.python.org/library/difflib.html

段:

difflib.SequenceMatcher(None, file1.read(), file2.read())

答案 1 :(得分:2)

这非常重要。我打算用一个小脚本来匹配注释和导入,但即使这样也需要大量的“智能”正则表达式解析数据。导入语句可以运行到几行,您必须在逗号上拆分所有这些行,将str.strip映射到结果列表,然后比较这些集。这甚至不算'来自foo import bar'或'import foo.bar'。

并且'import mymodule,urllib'这一行会导致Python崩溃。如果您要将内容与Python的内容相比较,那么它们必须是有效的 Python,否则结果将是不确定的。

这是一个仅仅比较进口的概念验证理念:

jcomeau@intrepid:/tmp$ cat t1.py
import sys, os, re
jcomeau@intrepid:/tmp$ cat t2.py
import os, sys, re, csv
jcomeau@intrepid:/tmp$ cat compare.py 
class t1:
 from t1 import *
class t2:
 from t2 import *
print 't1', dir(t1)
print 't2', dir(t2)
print set(dir(t1)) & set(dir(t2)) == set(dir(t1))
jcomeau@intrepid:/tmp$ python compare.py
compare.py:1: SyntaxWarning: import * only allowed at module level
  class t1:
compare.py:3: SyntaxWarning: import * only allowed at module level
  class t2:
t1 ['__doc__', '__module__', 'os', 're', 'sys']
t2 ['__doc__', '__module__', 'csv', 'os', 're', 'sys']
True