2011-06-04 48 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