Python 文件查找及内容匹配方法

来自技术流笔记
跳转至: 导航搜索

需求:程序开发中有大量的接口,但在实际的使用中有一部分是没有使用的,在开发的程序中匹配这些接口名,找到哪些接口从没有使用过。将这些没有使用过的接口名保存下来。

代码结构:

结构解析:

1、find.py 是文件查找及匹配程序

2、input_files.txt是待匹配内容

文件格式如下:

3、result.txt 用于存放查找结果

格式同上

4、text.txt 用于测试的文档(可忽略)

实际代码:

find.py

 1 #!/usr/bin/python
 2 # -*- coding: UTF-8 -*-
 3 import os, re, datetime
 4 
 5 
 6 class Find(object):
 7  def __init__(self, root, input_file):
 8   """
 9     --初始化
10   """
11   self.root = root # 文件树的根
12   self.input_files = [] # 待查询的字符串集合
13   self.files = [] # 待匹配的文件集合
14   self.current = 0 # 正在匹配的文件集合的位置
15 
16   f = file(input_file, "r")
17   old_content = f.read()
18   f.close()
19   self.input_files = old_content.split('\n') # 将待匹配字符串保存在数组中
20 
21  @staticmethod
22  def find_file(self):
23   """
24   --查找文件,即遍历文件树将查找到的文件放在文件集合中
25   :return:
26   """
27   # python中的walk方法可以查找到所给路径下的所有文件和文件夹,这里只用文件
28   for root, dirs, files in os.walk(self.root, topdown=True):
29    for name in files:
30     self.files.append(os.path.join(root, name))
31     #  print(os.path.join(root, name))
32     # for name in dirs:
33     #  print(os.path.join(root, name))
34 
35  @staticmethod
36  def walk(self):
37   """
38   --逐一查找,并将结果存入result.txt文件中
39   :param self:
40   :return:
41   """
42   for item1 in self.files:
43    Find.traverse_file(self, item1)
44   try:
45    result = ''
46    for item3 in self.input_files:
47     result += item3 + '\n'
48    f = file("./result_files.txt", "w")
49    f.write(result)
50    f.close()
51   except IOError, msg:
52    print "Error:", msg
53   else:
54    print "OK"
55 
56  @staticmethod
57  def traverse_file(self, file_path):
58   """
59   --遍历文件,匹配字符串
60   :return:
61   """
62   f = file(file_path, "r")
63   file_content = f.read()
64   f.close()
65   input_files = []
66   for item2 in self.input_files:
67    if item2:
68     # 正则匹配,不区分大小写
69     searchObj = re.search(r'(.*)' + item2 + '.*', file_content, re.M | re.I)
70     if searchObj:
71      continue
72     else:
73      input_files.append(item2)
74   self.input_files = input_files
75 
76 
77 if __name__ == "__main__":
78 
79  print datetime.datetime.now()
80  findObj = Find('F:\\projects', "./input_files.txt")
81  findObj.find_file(findObj)
82  findObj.walk(findObj)
83  print datetime.datetime.now()