有更好的工具来做到这一点(grep
所提到的,它可能是最好的方式)。
现在,如果你想要一个Python的解决方案(这将运行速度非常慢),你可以从这里开始:
import os
def find(word):
def _find(path):
with open(path, "rb") as fp:
for n, line in enumerate(fp):
if word in line:
yield n+1, line
return _find
def search(word, start):
finder = find(word)
for root, dirs, files in os.walk(start):
for f in files:
path = os.path.join(root, f)
for line_number, line in finder(path):
yield path, line_number, line.strip()
if __name__ == "__main__":
import sys
if not len(sys.argv) == 3:
print("usage: word directory")
sys.exit(1)
word = sys.argv[1]
start = sys.argv[2]
for path, line_number, line in search(word, start):
print ("{0} matches in line {1}: '{2}'".format(path, line_number, line))
请借此与一粒盐:它不会使用正则表达式,或一点都不聪明。例如,如果您尝试搜索“hola”,它将匹配“nicholas”,但不匹配“Hola”(在后一种情况下,您可以添加一个line.lower()方法。
一开始向您展示一个可能的方式开始。然而,请请使用grep
干杯
采样运行(我叫这个脚本“pygrep.py”; $
是命令提示符)。
$python pygrep.py finder .
./pygrep.py matches in line 12: 'finder = find(word)'
./pygrep.py matches in line 16: 'for line_number, line in finder(path):'
./pygrep.py~ matches in line 11: 'finder = find(word)'
听起来像是grep的工作 – 2012-02-14 03:38:01