查找文件中字符串很简单,主要是遍历文件夹中所有的文件。
遍历文件目录主要用的 os 模块,主要代码如下:
# -*- coding: cp936 -*-
#在目录下查询文件中存在的字符串
import os
class SearchWordFromFiles:
path = '' #路径
word = '' #要搜索的word关键字
wlength = 0 #word关键字长度
start = 0 #当前行开始位置
lineNum = 0 #当前遍历的行号
#查询,路径,字符串
def search(self, path, word):
self.path = path
self.word = word
self.wlength = len(word)
self.getFiles(path)
#遍历目录下所有文件
def getFiles(self, path):
dirs = os.listdir(path) # 列出该目录下所有文件列表
for d in dirs:
subpath = os.path.join(path, d) #遍历并判断文件or文件夹
if os.path.isfile(subpath):
self.readFile(subpath) #如果为文件直接查询
else:
self.getFiles(subpath) #如果为文件夹遍历继续遍历文件
#查询文件中是否存在字符串
def readFile(self, fileName):
print 'begin read file:' + fileName
f = open(fileName, 'r') #打开文件
self.lineNum = 1 #记录行数
while True:
line = f.readline() #读取当前行
if not line: #如果读取文件则结束则退出
break
#index = line.find(self.word) #查询当前行是否存在字符
#if(index != -1):
#print '第【' + str(i) + '】行,第【' + str(index) + '】个字符'
self.start = 0
self.searchFromText(line, self.word)
self.lineNum = self.lineNum + 1
f.close() #关闭文件
print 'read over file:' + fileName
print '------------------------'
#从text中查找word
def searchFromText(self, text, word):
tlength = len(text)
index = text.find(word)
if index != -1:
print '第【 '+ str(self.lineNum) +' 】行,第【' + str(self.start + index) + '】个字符'
self.start = index + self.wlength
self.searchFromText(text[self.start:tlength], word)
########################################
#调用
path = 'E:\\tuina\\assets\\www\\app'
words = 'pp'
swff = SearchWordFromFiles()
swff.search(path, words)