|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
# coding=gbk
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
我写的以上程序如果换一个路径也是一模一样的报错。是不是哪里有什么设定的小机关。
|
|