Pythonはgeventに基づいてファイルの文字列の検索器を実現します。
1、再帰的にディレクトリの下のすべてのファイルを巡回して、finder関数を通じて指定された書式文字列を特定します。
2、文字列を検索するためのfinder関数は自分で定義しています。ここでip_を定義しています。ぽろぽろfinderは正規表現でip:port形式(太字マッチ:数字.数字.数字.数字:数字)の文字列を検索します。
3、geventで協働を実現し、同時に時間のかかる任務を完成する。
コードは以下の通りです
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)
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。