42 lines
1.3 KiB
Python
42 lines
1.3 KiB
Python
import os
|
||
from fnmatch import fnmatchcase
|
||
|
||
if __name__ == "__main__":
|
||
base_path = "D:\Code\Learn\practice"
|
||
|
||
# 想要建立一个处理管道,需要将几个生成器函数堆叠,比如,我现在要输出所有practice文件夹下的注释行内容
|
||
# 1.首先生成文件夹路径
|
||
def gen_dir_path(fpath):
|
||
for path, dir, files in os.walk(fpath):
|
||
for file in files:
|
||
if (not fnmatchcase(path, "*.[git][idea]*")) and (not fnmatchcase(file, "*.md")):
|
||
yield os.path.join(path, file)
|
||
|
||
# 2.打开文件
|
||
def gen_file(paths):
|
||
for path in paths:
|
||
f = open(path, 'rt', encoding='utf-8')
|
||
yield f
|
||
f.close()
|
||
|
||
# 3.读取文件内容
|
||
def gen_file_txt(opened_files):
|
||
for file in opened_files:
|
||
yield from file
|
||
print("done")
|
||
|
||
# 4.匹配符合条件的文件行
|
||
def read_file_lines(file_lines):
|
||
for line in file_lines:
|
||
if "#" in line:
|
||
print(line)
|
||
|
||
# 将这些函数堆在一起就组成了一条管道,每次生成一个对象进行流水线处理,
|
||
# 这样避免了for循环的嵌套
|
||
paths = gen_dir_path(base_path)
|
||
files = gen_file(paths)
|
||
lines = gen_file_txt(files)
|
||
read_file_lines(lines)
|
||
|
||
|