首页 > 代码库 > 查找目录下的关键字以及显示行数
查找目录下的关键字以及显示行数
1 import os 2 def print_pos(key_dict): 3 keys = key_dict.keys() 4 keys = sorted(keys) # 由于字典是无序的,我们这里对行数进行排序 5 for each_key in keys: 6 print(‘关键字出现在第 %s 行,第 %s 个位置。‘ % (each_key, str(key_dict[each_key]))) 7 8 def pos_in_line(line, key): 9 pos = [] 10 begin = line.find(key) #查找关键字在每一行中的位置 赋值给begin 11 while begin != -1: 12 pos.append(begin + 1) # 用户的角度是从1开始数 13 begin = line.find(key, begin+1) # 从下一个位置继续查找 14 15 return pos 16 17 def search_in_file(file_name, key): 18 f = open(file_name) #打开文本文件 19 count = 0 # 记录行数 20 key_dict = dict() # 定义字典,用户存放key所在具体行数对应具体位置 21 22 for each_line in f: #遍历文本文件中的每一行 23 count += 1 #行数记录 24 if key in each_line: #如果关键字在某一行中 25 pos = pos_in_line(each_line, key) # key在每行对应的位置 调用pos_in_line函数 传入这个行 和 关键字 26 key_dict[count] = pos 27 28 f.close() 29 return key_dict 30 31 def search_files(key, detail): #第一步调用search_file函数 把 key, detail 参数传入进去 32 all_files = os.walk(os.getcwd()) #遍历当前目录下的所有文档,返回1目录,2包含路径,3包含文件 将返回的结果赋值给all_files 33 txt_files = [] #定义列表txt_files 34 35 for i in all_files: #遍历all_files 注意这里的i为单次遍历的三元组 36 for each_file in i[2]: #遍历三元组的第三个值,即遍历文件,这里的each_file 为单次遍历的文件 37 if os.path.splitext(each_file)[1] == ‘.txt‘: # 根据后缀判断是否文本文件 38 each_file = os.path.join(i[0], each_file) #如果each_file 是文本文件 则将该文件的路径名称以及文件名称结合 并赋值给each_file 39 txt_files.append(each_file) #列表txt_files 中追加each_file 此时的each_file为全路径含文件名 列表中追加的文本文件全路径 40 41 for each_txt_file in txt_files:#在列表txt_file中 遍历所有的文本文件 each_txt_file为单次遍历的文本文件名 42 key_dict = search_in_file(each_txt_file, key)#调用seach_in_file函数,传入单次遍历的文本文件名each_txt_file和用户输入的关键字key 43 if key_dict: 44 print(‘================================================================‘) 45 print(‘在文件【%s】中找到关键字【%s】‘ % (each_txt_file, key)) 46 if detail in [‘YES‘, ‘Yes‘, ‘yes‘]: 47 print_pos(key_dict) 48 49 key = input(‘请将该脚本放于待查找的文件夹内,请输入关键字:‘) #接受用户输入的关键字 key为用户输入的结果 50 detail = input(‘请问是否需要打印关键字【%s】在文件中的具体位置(YES/NO):‘ % key) #请示用户是否打印 detail为请示结果 51 search_files(key, detail) #调用函数search_files 传入关键字 key, detail
查找目录下的关键字以及显示行数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。