查找目录下的关键字以及显示行数

 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
时间: 2024-08-03 21:12:06

查找目录下的关键字以及显示行数的相关文章

Linux:从文件中搜索关键字并显示行数(cat,grep函数)

假如有test1.txt的格式如下图所示: 有test2.txt的内容如下: 现需将test2.txt含有的关键字的行搜索出来并显示行数 则可以用到命令: cat test1.txt | grep -nf test2.txt 运行后,效果如下: 36840733和36909134表示含有这两个关键字所在的行数.

Linux统计目录下文件个数及代码行数

1. 统计当前目录下,php文件数量 find ./ -name "*.php" | wc -l 2. 统计当前目录下所有php文件代码行数 find ./ -name "*.php" | xargs cat | wc -l 或者 wc -l `find ./ -name "*.php"` | tail -n1 命令说明 wc -l `find ./ -name "*.php"` 输出结果 行数 | 文件 1 ./test.p

vim 在linux下中如何设置显示行数

在.vimrc(或/etc/vimrc)文件中输入如下文本: set tabstop=4 set softtabstop=4 set shiftwidth=4 set noexpandtab set nu set autoindent set cindent 其中:Tabstop:表示一个 tab 显示出来是多少个空格的长度,默认 8.

查找目录下的所有文件中是否含有某个字符串 linux

查找目录下的所有文件中是否含有某个字符串 find .|xargs grep -ri "IBM" 查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名 find .|xargs grep -ri "IBM" -l 1.正则表达式    (1)正则表达式一般用来描述文本模式的特殊用法,由普通字符(例如字符a-z)以及特殊字符(称为元字符,如/.*.?等)组成.   (2)基本元字符集及其含义       ^ :只匹配行首.   如^a 匹配以a开头的行abc,

linux查找目录下的所有文件中是否含有某个字符串

查找目录下的所有文件中是否含有某个字符串 find .|xargs grep -ri "IBM" find .|xargs grep -ri "IBM" -l \ :只用来屏蔽一个元字符的特殊含义. 如\*,\',\",\|,\+,\^,\. 等       .:(点)只匹配任意单字符.       pattern\{n\}:只用来匹配前面pattern出现的次数.n为次数.如a\{2\}匹配aa.       pattern\{n,\}:含义同上,但次数

linux查找目录下的所有文件中是否含有某个字符串 <zhuan>

查找目录下的所有文件中是否含有某个字符串 find .|xargs grep -ri "IBM" 查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名 find .|xargs grep -ri "IBM" -l 1.正则表达式 (1)正则表达式一般用来描述文本模式的特殊用法,由普通字符(例如字符a-z)以及特殊字符(称为元字符,如/.*.?等)组成. (2)基本元字符集及其含义 ^ :只匹配行首. 如^a 匹配以a开头的行abc,a2e,a12,aaa,.

linux 查询目录下包含关键字的所有文件

linux查找目录下的所有文件中是否含有某个字符串 查找目录下的所有文件中是否含有某个字符串 find .|xargs grep -ri "IBM" 查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名 find .|xargs grep -ri "IBM" -l 1.正则表达式    (1)正则表达式一般用来描述文本模式的特殊用法,由普通字符(例如字符a-z)以及特殊字符(称为元字符,如/.*.?等)组成.   (2)基本元字符集及其含义       ^

查找目录下匹配.py或者.txt的文件

#!/usr/bin/python def endWith(s,*endstring_1):       #*代表允许传输多个参数,名称统一为endstring为元祖,**为字典 array = map(s.endswith,endstring_1)  #map(调用的函数名称,给这个函数传的参数) if True in array: return True else: return False if __name__ == '__main__': import os s = os.listdi

Go实现查找目录下(包括子目录)替换文件内容

[功能] 按指定的目录查找出文件,如果有子目录,子目录也将进行搜索,将其中的文件内容进行替换. [缺陷] 1. 没有过滤出文本文件 2. 当文件过大时,效率不高 [代码] package main import ( "flag" "fmt" "io/ioutil" "os" "path/filepath" "strings" ) type ReplaceHelper struct { R