|  | 
 
| 
# coding=gbk
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  import os
 def key_in_line(line, key):    # 记录关键字在行的什么位置
 pos = []
 begin = line.find(key)
 while begin != -1:
 pos.append(begin + 1)
 begin = line.find(key, begin + 1)
 return pos
 
 
 def search_in_file(filename, key):     # 在文件中查找有没有关键字并且把它所在行记录为一个字典
 f = open(filename, encoding='utf-8')
 key_dict = {}
 for index, each_line in enumerate(f):
 if key in each_line:
 pos = key_in_line(each_line, key)
 key_dict[index+1] = pos
 f.close()
 for i in key_dict:
 for j in key_dict[i]:
 print(f'关键字【{key}】在文件【{filename}】里的第【{i}】行第【{j}】字出现。')
 
 
 def search_txt_file(path,key,dicide):   # 处理给出的路径并筛选处所有txt文件
 os.chdir(path)
 allfile = list(os.walk(os.getcwd()))
 txt_file = []
 for i in allfile:
 for j in i[2]:
 if os.path.splitext(j)[1] == '.txt':
 txt_file.append(os.path.join(i[0],j))
 for h in txt_file:
 search_in_file(h,key)
 def input_():
 while True:
 path = input('请输入要查找的范围/输入路径/退出按q:')
 if path == 'q':
 break
 key = input('请输入要查找的关键字/退回上级按q:')
 if key == 'q':
 return input_()
 dicide = input('请为您是否要打印关键字的位置/确定输入yes:')
 if dicide in ['YES', 'Yes', 'yes']:
 search_txt_file(path,key,dicide)
 else:
 break
 
 input_()
 
 输出
 请输入要查找的范围/输入路径/退出按q:E:\A
 请输入要查找的关键字/退回上级按q:小甲鱼
 请为您是否要打印关键字的位置/确定输入yes:yes
 关键字【小甲鱼】在文件【E:\A\对话记录片段.txt】里的第【1】行第【5】字出现。
 关键字【小甲鱼】在文件【E:\A\对话记录片段.txt】里的第【2】行第【1】字出现。
 关键字【小甲鱼】在文件【E:\A\对话记录片段.txt】里的第【3】行第【7】字出现。
 关键字【小甲鱼】在文件【E:\A\对话记录片段.txt】里的第【4】行第【1】字出现。
 关键字【小甲鱼】在文件【E:\A\对话记录片段.txt】里的第【6】行第【1】字出现。
 关键字【小甲鱼】在文件【E:\A\对话记录片段.txt】里的第【8】行第【1】字出现。
 关键字【小甲鱼】在文件【E:\A\C\record.txt】里的第【1】行第【5】字出现。
 关键字【小甲鱼】在文件【E:\A\C\record.txt】里的第【2】行第【1】字出现。
 关键字【小甲鱼】在文件【E:\A\C\record.txt】里的第【4】行第【1】字出现。
 关键字【小甲鱼】在文件【E:\A\C\record.txt】里的第【6】行第【1】字出现。
 关键字【小甲鱼】在文件【E:\A\C\record.txt】里的第【8】行第【1】字出现。
 关键字【小甲鱼】在文件【E:\A\C\record.txt】里的第【10】行第【1】字出现。
 关键字【小甲鱼】在文件【E:\A\C\record.txt】里的第【13】行第【5】字出现。
 关键字【小甲鱼】在文件【E:\A\C\record.txt】里的第【14】行第【1】字出现。
 关键字【小甲鱼】在文件【E:\A\C\record.txt】里的第【15】行第【7】字出现。
 关键字【小甲鱼】在文件【E:\A\C\record.txt】里的第【16】行第【1】字出现。
 关键字【小甲鱼】在文件【E:\A\C\record.txt】里的第【18】行第【1】字出现。
 关键字【小甲鱼】在文件【E:\A\C\record.txt】里的第【20】行第【1】字出现。
 关键字【小甲鱼】在文件【E:\A\C\record.txt】里的第【22】行第【5】字出现。
 关键字【小甲鱼】在文件【E:\A\C\record.txt】里的第【23】行第【1】字出现。
 关键字【小甲鱼】在文件【E:\A\C\record.txt】里的第【25】行第【1】字出现。
 关键字【小甲鱼】在文件【E:\A\C\record.txt】里的第【27】行第【1】字出现。
 关键字【小甲鱼】在文件【E:\A\C\record.txt】里的第【29】行第【1】字出现。
 关键字【小甲鱼】在文件【E:\A\C\record.txt】里的第【31】行第【1】字出现。
 请输入要查找的范围/输入路径/退出按q:
 问题这个程序成功了。但是换一个路径就会报错。小甲鱼的答案也是一模一样的报错
 小甲鱼答案报错如下
 请将该脚本放于待查找的文件夹内,请输入关键字:小甲鱼
 请问是否需要打印关键字【小甲鱼】在文件中的具体位置(YES/NO):yes
 Traceback (most recent call last):
 File "C:\Users\lili2\PycharmProjects\python学习\小甲鱼Python学习\lili_练习2.py", line 58, in <module>
 search_files(key, detail)
 File "C:\Users\lili2\PycharmProjects\python学习\小甲鱼Python学习\lili_练习2.py", line 48, in search_files
 key_dict = search_in_file(each_txt_file, key)
 File "C:\Users\lili2\PycharmProjects\python学习\小甲鱼Python学习\lili_练习2.py", line 27, in search_in_file
 for each_line in f:
 File "C:\Users\lili2\AppData\Local\Programs\Python\Python39\lib\codecs.py", line 322, in decode
 (result, consumed) = self._buffer_decode(data, self.errors, final)
 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb3 in position 0: invalid start byte
 
 我写的以上程序如果换一个路径也是一模一样的报错。是不是哪里有什么设定的小机关。
 
 | 
 |