|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这个程序是根据用户输入路径查找文件夹内所有含有关键词的文件,并显示在文件内具体位置(第几行第几列)
- import os
- def find_word(line,word): #关键字在某一行的具体位置
- n = []
- m = line.find(word)
- while m != 1:
- n.append(m)
- m = line.find(word,m + 1)
- return n
- def find_line(file,word): #定义记录关键字行数的函数
- n = 0
- f = open(file,'rt')
- m = {}
- for i in f:
- n += 1
- if word in i:
- q = find_word(i,word)
- m[n] = q
- f.close()
- return m
- def file_find(paths,word):
- text_files = []
- all_files = os.walk(paths)
- for i in all_files:
- for r in i[2]:
- if os.path.splitext(r)[1] == '.txt':
- r = os.path.join(i[0],r)
- text_files.append(r)
- for each_text in text_files:
- m = file_find(each_text,word)
- if m:
- print_file(m)
- def print_file(m): #定义输出函数
- keys = m.keys
- for each_keys in keys:
- print(f'关键字出现在{each_keys}行的第{m[keys]}个字符')
- word = input('请输入关键字:')
- paths = input('请输入查找初始路径:')
- file_find(paths,word)
复制代码
最开始报错了,但是后来不知道怎么回事不报错了,但是什么也不输出
有三个错误:
第一个错误: while 循环条件错误,应该是 m != -1 ,而你 m != 1 会导致死循环
第二个错误:file_find() 函数里的 for each_text 循环下面 m = file_find(each_text,word) 错了,应该改成 m = find_line(each_text,word)
第三个错误:最后一个函数 print_file(m) ,你 m[keys] 是错的,应该将 print_file(m) 函数改成这样:
- import os
- def find_word(line,word): #关键字在某一行的具体位置
- n = []
- m = line.find(word)
- while m != -1:
- n.append(m)
- m = line.find(word,m + 1)
- return n
- def find_line(file,word): #定义记录关键字行数的函数
- n = 0
- f = open(file,'rt')
- m = {}
- for i in f:
- n += 1
- if word in i:
- q = find_word(i,word)
- m[n] = q
- f.close()
- return m
- def file_find(paths,word):
- text_files = []
- all_files = os.walk(paths)
- for i in all_files:
- for r in i[2]:
- if os.path.splitext(r)[1] == '.txt':
- r = os.path.join(i[0],r)
- text_files.append(r)
- for each_text in text_files:
- m = find_line(each_text,word)
- if m:
- print('\n'+f'文件路径:{each_text}'.center(60,'-'))
- print_file(m)
- def print_file(m): #定义输出函数
- for each_keys in m:
- print(f'关键字出现在{each_keys}行的第{m[each_keys]}个字符')
- word = input('请输入关键字:')
- paths = input('请输入查找初始路径:')
- file_find(paths,word)
复制代码
你的代码我帮加上打印文件路径了
|
|