2011-06-04 49 views
0

两个文件的内容我有一个文件名exclusionlist.txt和我有内容像比较使用python

  import os 
      import re 
      import subprocess 
      ......and many more 

我有另一个libraries.txt文件命名,该文件的内容是

  import mymodule 
     import empmodule,os 
     import subprocess 
     import datetime,logging,re 
     .......and many more 

我的问题是,从蟒蛇怎么知道这是在exclusionlist.txt内容也出现在libraries.txt因为这混乱了..

  f = open('exclusionlist.txt', 'r') 
     f.read() 

     f1= open('libraries.txt', 'r') 
     f1.read() 

     if (//Is contents of f1 present in f2): 
      print libraries found 
     else: 
      print not found 

     f.close() 
     f1.close() 
+0

如果在这里你的目标是从加载某些模块停止Python代码(即在沙箱环境中运行代码),那么你可能想看看rexec模块,它提供了一个“受限制的执行框架”(带有警告)。 – 2011-06-04 07:27:25

回答

1

使用交集:

def readImports(path): 
    with open(path) as f: 
     for line in f: 
      # lines of form "import ___,___" 
      # assuming not of form "from ___ import ___ [as ___]" 
      if 'import' in line: 
       modules = line.split('import')[1] 
       for module in modules.split(','): 
        yield module.strip() 

linesInExclusion = set(readImports('exclusionlist.txt')) 
linesInLibraries = set(readImports('libraries.txt')) 

print(linesInExclusion.intersection(linesInLibraries)) 

你可以做return (line.strip() for line in f if line.strip()!='')如果你想成为完美...

+2

我认为你想要交集(内容在两个,不?),并且上面将不会捕获“重复”的重复,因为它不是重复“重新导入”行。我认为他需要分裂右手,然后相交。 – DSM 2011-06-04 06:45:23

+0

@DSM哎呀谢谢,我的意思是交集,它迟了......而且你也是对的,正在更新...... – ninjagecko 2011-06-04 06:49:31

+0

whats in both:linesInExclusion&linesInLibraries,whats in linesInExclusion但不在linesInLibraries:linesInExclusion-linesInLibraries中,类似地:linesInLibraries-linesInLibraries, whats not in both:linesInExclusion^linesInLibraries – 2011-06-04 06:57:31