各位用户为了找寻关于python实现搜索指定目录下文件及文件内搜索指定关键词的方法的资料费劲了很多周折。这里教程网为您整理了关于python实现搜索指定目录下文件及文件内搜索指定关键词的方法的相关资料,仅供查阅,以下为您介绍关于python实现搜索指定目录下文件及文件内搜索指定关键词的方法的详细内容
本文实例讲述了python实现搜索指定目录下文件及文件内搜索指定关键词的方法。分享给大家供大家参考。具体实现方法如下:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61#!/usr/bin/python -O
# -*- coding: UTF-8 -*-
"""
Sucht rekursiv in Dateiinhalten und listet die Fundstellen auf.
"""
__author__
=
"Jens Diemer"
__license__
=
"""GNU General Public License v2 or above -
http://www.opensource.org/licenses/gpl-license.php"""
__url__
=
"http://www.jensdiemer.de"
__version__
=
"0.1"
import
os, time, fnmatch
class
search:
def
__init__(
self
, path, search_string, file_filter):
self
.search_path
=
path
self
.search_string
=
search_string
self
.file_filter
=
file_filter
print
"Search '%s' in [%s]..."
%
(
self
.search_string,
self
.search_path
)
print
"_"
*
80
time_begin
=
time.time()
file_count
=
self
.walk()
print
"_"
*
80
print
"%s files searched in %0.2fsec."
%
(
file_count, (time.time()
-
time_begin)
)
def
walk(
self
):
file_count
=
0
for
root, dirlist, filelist
in
os.walk(
self
.search_path, followlinks
=
True
):
for
filename
in
filelist:
for
file_filter
in
self
.file_filter:
if
fnmatch.fnmatch(filename, file_filter):
self
.search_file(os.path.join(root, filename))
file_count
+
=
1
return
file_count
def
search_file(
self
, filepath):
f
=
file
(filepath,
"r"
)
content
=
f.read()
f.close()
if
self
.search_string
in
content:
print
filepath
self
.cutout_content(content)
def
cutout_content(
self
, content):
current_pos
=
0
search_string_len
=
len
(
self
.search_string)
for
i
in
xrange
(max_cutouts):
try
:
pos
=
content.index(
self
.search_string, current_pos)
except
ValueError:
break
content_window
=
content[ pos
-
content_extract : pos
+
content_extract ]
print
">>>"
, content_window.encode(
"String_Escape"
)
current_pos
+
=
pos
+
search_string_len
print
if
__name__
=
=
"__main__"
:
search_path
=
r
"c:texte"
file_filter
=
(
"*.py"
,)
# fnmatch-Filter
search_string
=
"history"
content_extract
=
35
# Gr��e des Ausschnittes der angezeigt wird
max_cutouts
=
20
# Max. Anzahl an Treffer, die Angezeigt werden sollen
search(search_path, search_string, file_filter)
希望本文所述对大家的Python程序设计有所帮助。