Pythonはgeventに基づいてファイルの文字列の検索器を実現します。


1、再帰的にディレクトリの下のすべてのファイルを巡回して、finder関数を通じて指定された書式文字列を特定します。
2、文字列を検索するためのfinder関数は自分で定義しています。ここでip_を定義しています。ぽろぽろfinderは正規表現でip:port形式(太字マッチ:数字.数字.数字.数字:数字)の文字列を検索します。
3、geventで協働を実現し、同時に時間のかかる任務を完成する。
コードは以下の通りです

# -*- coding: utf-8 -*-
import re
from os.path import join
from os import walk
from gevent import monkey
import gevent

monkey.patch_all()


def ip_port_finder(str: str) -> bool:
  pattern = re.compile(r".+\d+\.\d+\.\d+\.\d+:\d+")
  matchObj = pattern.match(str)
  if matchObj:
    print("------")
    print(f"    :{matchObj.group(0)}")
    return True
  else:
    return False


def find_in_file(file_path, finder):
  with open(file_path, "r", encoding="utf-8", errors='ignore') as f:
    for (num, value) in enumerate(f):
      if finder(value):
        print(f"    :{file_path}")
        print(f"    :{num}")


find_in_path_recursively = lambda path, finder: gevent.joinall(
  [gevent.spawn(find_in_file, join(root, file_name), finder) for root, directories, f_names in walk(path) for
   file_name in f_names])

if __name__ == '__main__':
  path = "E:\dev_codes\xxx"
  find_in_path_recursively(path, ip_port_finder)
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。