今天学了第七课,grep命令,实现了
test_grep.py pathlib *.py -r
test_grep.py pathlib *.py
可以实现正则匹配搜寻的文件 *.py *.conf之类的配置文件
test_grep.py 和原作者的版本稍有不同
入下:
import re, argparse
from pathlib import Path
def get_connet(keyword, search_path, flag= False):
regex = re.compile(keyword)
if flag:
search_filedir = Path('./').rglob(search_path or "*")
else:
search_filedir = Path('./').glob(search_path or "*")
for dir_file in search_filedir:
if dir_file.is_file():
with open(str(dir_file), 'r', encoding='utf-8') as f:
for line in f.readlines():
if regex.search(line):
print('{}\t {}'.format(dir_file, line), end='')
def parse_args():
parse = argparse.ArgumentParser()
parse.add_argument("keyw")
parse.add_argument("searchfile")
parse.add_argument("-r", "--recursion", action="store_true")
return parse.parse_args()
args = parse_args()
get_connet(args.keyw, args.searchfile, args.recursion)
说明
原作者实现的命令是
python3.6 grep.py line grep.py
我的使用环境python3.7 pycharm环境
注:1、是在指定的文件里面去查找,所以可以直接open那个文件,而我是在 Path(’./’).rglob(search_path or “*”)这默认指定了当前目录了;
2、作者一直这样使用输入的参数,
args.start[0], args.pattern[0]
我很不理解,后来发现是parse_args()函数中的parse.add_argument 我没有配置
“nargs=1” 这个参数,如果配置了输入的参数就会变成list了,而没配置这个参数,默认是str,这里一定要注意;
3、另外作者视频语速太快了,最好是0.75语速看,我自己做完,再看他的讲解也感觉好快。