2012-08-23 48 views
2

我已經編寫了一個Python腳本來查找包含某個目錄中每個文件的特定腳本的行。它工作正常,如果我讓這個腳本運行在這些文件的目錄。使用os.walk搜索文件中的字符串

#!/usr/bin/env python 
import os 

def searchthis(location, searchterm): 
    for fname in os.listdir(location): 
     fullpath = os.path.join(location, fname) 
     for line in file(fullpath): 
      if searchterm in line: 
       print line 



searchthis(os.getcwd(), "mystring") 

有什麼辦法,我可以用os.walk做到這一點,搜索遞歸地在每個存在於所有的目錄和子目錄中的文件。

回答

1
#!/usr/bin/env python 

import os 

def searchthis(location, searchterm): 
    for dir_path, dirs, file_names in os.walk(location): 
     for file_name in file_names: 
     fullpath = os.path.join(dir_path, file_name) 
     for line in file(fullpath): 
      if searchterm in line: 
       print line 

searchthis(os.getcwd(), "mystring") 
+0

非常感謝。完美工作。 –

2

您可以使用一個簡單的迭代器,像這樣:

def all_files(dir): 
    for root, dirs, files in os.walk(os.path.abspath(dir)): 
     for f in files: 
      yield os.path.join(root, f) 

例如:

for path in all_files(os.getcwd()): 
    with open(path) as f: 
     for n, line in enumerate(f, 1): 
      if term in line: 
       print path, n 
+0

工作得很好。非常感謝。 –